3

I am using play-authenticate to login a user with Google Oauth2. Now I want to get the Access Token so I can use some Google APIs.

Can anyone help me out here? Is it so obvious that I am missing how to do it?

I can get a User like this (from the examples):

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

But what I really need is the

OAuth2AuthUser.getOAuth2AuthInfo().getAccessToken()

I can't cast the AuthUser as an OAuth2AuthUser. so how can I do it?

4

1 回答 1

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;
}

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

实际上,调用 Authenticate.authenticate (就像您从路由中所做的那样)依次调用 PlayAuthenticate.handleAuthentication、PlayAuthenticate.loginAndRedirect、PlayAuthenticate.storeUser 并最终更新当前用户服务插件。

于 2013-03-01T14:14:10.603 回答