2012-08-09 121 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