使用play-authenticate时如何获得Oauth访问令牌?

时间:2012-11-08 09:04:28

标签: playframework-2.0

我正在使用play-authenticate通过Google Oauth2登录用户。现在我想获得访问令牌,以便我可以使用一些Google API。

任何人都可以帮助我吗?是不是很明显我错过了怎么做?

我可以得到这样的用户(来自示例):

final AuthUser u = PlayAuthenticate.getUser(session()); 

但我真正需要的是

OAuth2AuthUser.getOAuth2AuthInfo().getAccessToken()

我无法将AuthUser强制转换为OAuth2AuthUser。那怎么办呢?

1 个答案:

答案 0 :(得分:1)

我们提出了一个覆盖UserServicePlugin更新方法的解决方案。只需创建一个派生自com.feth.play.module.pa.service.UserServicePlugin的类,并在play.plugins文件中将该类注册为插件(正如您在使用play-authenticate时所做的那样)。

然后,在重写的更新方法中,您可以根据需要存储访问令牌。

@Override
public AuthUser update(final AuthUser knownUser)
{
    if (knownUser instanceof OAuth2AuthUser)
    {
        OAuth2AuthUser oAuth2AuthUser = (OAuth2AuthUser) knownUser;
        String oauth2accessToken = oAuth2AuthUser.getOAuth2AuthInfo().getAccessToken();
        Context.current().session().put("oauth2accessToken", oauth2accessToken);
    }

    return knownUser;
}

documentation表示这是“在用户登录时调用的方法。您可以在此处使用来自登录提供程序的数据进行配置文件更新,或者使用最后登录日期。”

事实上,调用Authenticate.authenticate(就像你从你的路线那样)调用,依次调用PlayAuthenticate.handleAuthentication,PlayAuthenticate.loginAndRedirect,PlayAuthenticate.storeUser,最后更新当前用户服务插件。