【问题标题】:Grails spring-security-facebook plugin's accessTokenGrails spring-security-facebook 插件的 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() 时(并且此调用是在用户第一次登录时进行的)

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


【解决方案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 这样的字段插件不知道令牌已过期
猜你喜欢
  • 2014-03-07
  • 2012-01-24
  • 2017-09-16
  • 2016-05-24
  • 2013-01-17
  • 2011-08-15
  • 2016-03-23
  • 2012-09-29
  • 2014-07-02
相关资源
最近更新 更多