Grails spring-security-facebook插件的accessToken

时间:2012-08-09 15:31:39

标签: facebook facebook-graph-api grails spring-security

我正在使用spring-security-facebook插件进行身份验证。它运作良好,现在我正在尝试使用spring-social-facebook的一些需要授权的功能。从我的控制器,我在哪里可以获得有效的accessToken(为了创建一个FacebookTemplate对象)?

这就是我使用插件的方式:

1)我添加了一个域类OAuthUser(不在插件中但在我的项目中) 2)我已经生成了一个FacebookAuthDaoImpl 3)我编辑了生成的方法,例如在create()中,我创建了

    +用户实例(主域类SecUser)并设置配置文件信息

    +一个新的OAuthUser(我在其中设置了uid,accessToken,并将其与创建的主用户相关联。

更新1: 我在我的FacebookAuthDaoImpl类中添加了这3个方法:

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。

1 个答案:

答案 0 :(得分: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种方法的?