Grails spring-security-facebook 插件的 accessToken
Posted
技术标签:
【中文标题】Grails spring-security-facebook 插件的 accessToken【英文标题】:Grails spring-security-facebook plugin's accessToken 【发布时间】:2012-08-06 21:05:59 【问题描述】:我正在使用 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。
【问题讨论】:
但是你在哪里更新user.accessTokenExpires
? hasValidToken
为 null 时返回什么?
@IgorArtamonov 我没有,我想知道从哪里可以得到到期日期。你有样品吗? (顺便说一句,我想出了如何从身份验证中获取 accessToken FacebookAuthToken token = SecurityContextHolder.context.authentication token.accessToken = facebookAuthUtils.getAccessToken(token.code)
)
void updateToken(OAuthUser user, FacebookAuthToken token) user.accessToken = token.acceessToken.accessToken user.accessTokenExpiration = = token.acceessToken.expireAt
@IgorArtamonov 是插件调用的 hasValidToken() 和 updateToken() 吗?还是我需要自己在 FacebookAuthDaoImpl 中添加调用?在这种情况下在哪里?因为我拥有令牌的唯一地方是调用 create() 时(并且此调用是在用户第一次登录时进行的)
【参考方案1】:
如果您使用的是默认 DAO:
它存储在您的 Facebook 用户域对象的字段 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 种方法的?
【讨论】:
Igor,我的 OAuthUser 域类中已经有一个 accessToken 字段(没有 accessTokenExpires 日期)。使用它时,我得到一个过期的访问令牌异常 我相信 Facebook 用户您使用的是不同的域,对吧?我的意思是它似乎是另一个插件的域,可能是 oauth auth 是的@Igor,我创建了一个链接到我的主要用户的 OAuthUser 域。不涉及其他插件 好的,所以,这个域被配置为'grails.plugins.springsecurity.facebook.domain.classname',对吧?在这种情况下,尝试添加accessTokenExpires
字段。 W/o 这样的字段插件不知道令牌已过期以上是关于Grails spring-security-facebook 插件的 accessToken的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Grails 之外使用 Grails 验证?如何?
Grails - grails.converters.JSON - 删除类名