我正在使用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。
答案 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种方法的?