2012-08-09 163 views
1

我使用spring-security-facebook插件進行身份驗證。它運作良好,現在我試圖使用需要授權的spring-social-facebook的一些功能。從我的控制器中,我可以在哪裏獲得有效的accessToken(以創建FacebookTemplate對象)?Grails spring-security-facebook插件的accessToken

這是我如何使用插件:

1)我添加了一個域類,OAuthUser(不在插件,但在我的項目) 2)我已經產生了FacebookAuthDaoImpl 3)我編輯的方法產生,例如,在創建(),I創建

+用戶(主域類SecUser)的實例,並設置配置文件的相關信息

+新OAuthUser(其中,i設置UID,該的accessToken,並將其與創建的主用戶相關聯。

更新1: 我添加這些3種方法在我FacebookAuthDaoImpl類:

Boolean hasValidToken(OAuthUser user){ 
    def now= new Date() 

    if(now.after(user.accessTokenExpires)){ 
     return false 
    } else { 
     return true 
    } 
} 

void updateToken(OAuthUser user, FacebookAuthToken token){ 

    user.accessToken = token.accessToken 
    user.save() 
} 

String getAccessToken(OAuthUser user){ 
    return user.accessToken 
} 

但我仍然有過期的accessToken。

+0

但你正在更新'user.accessTokenExpires'?如果hasValidToken爲null,它會返回什麼? – 2012-08-09 17:08:24

+0

@IgorArtamonov我不知道,我想弄清楚從哪裏可以得到到期日期。你有樣品嗎? (順便說一句,我想出瞭如何從認證'FacebookAuthToken令牌= SecurityContextHolder.context.authentication \t token.accessToken = facebookAuthUtils.getAccessToken(token.code)') – yeka 2012-08-09 17:31:20

+0

void updateToken(OAuthUser用戶,FacebookAuthToken令牌){ 用戶.accessToken = token.acceessToken.accessToken user.accessTokenExpiration = = token.acceessToken.expireAt } – 2012-08-10 04:57:52

回答

1

如果您使用默認DAO

它存儲在爲用戶Facebok的域對象的領域accessToken

如果您沒有名爲accessToken的字段,則應添加它(String accessToken)。理想情況下與一個額外的領域:Date accessTokenExpires。而且這兩個字段都會被插件自動填充。

如果你已經創建了自己的DAO實現,則:

  • create(FacebookAuthToken token)通訪問令牌作爲token.accessToken.accessToken。您可以將它存儲在任意位置
  • Boolean hasValidToken(F user),void updateToken(F user, FacebookAuthToken token)getAccessToken(F user) - 首先應檢查令牌過期,第二次更新爲新值(在令牌過期時調用),最後應更新當前值。

正如你所說,你有你自己的DAO實現。你如何實施最後3種方法?

+0

Igor調用,我的OAuthUser域類中已經有一個accessToken字段(沒有accessTokenExpires日期)。當使用它時,我得到一個過期的訪問令牌例外 – yeka 2012-08-09 15:53:14

+0

我相信Facebook用戶您使用的是不同的域名,對吧?我的意思是它似乎是另一個插件的域,可能oauth驗證 – 2012-08-09 15:54:09

+0

是@Igor,我創建了一個OAuthUser域,鏈接到我的主要用戶。有沒有其他插件 – yeka 2012-08-09 15:55:52