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.accessTokenExpireshasValidToken 为 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 验证?如何?

Grails:企业级 Grails [关闭]

Grails - grails.converters.JSON - 删除类名

Grails - 在刷新 grails 错误之前保存瞬态实例?

Grails 3 - 资源插件