我正在使用play-authenticate通过Google Oauth2登录用户。现在我想获得访问令牌,以便我可以使用一些Google API。
任何人都可以帮助我吗?是不是很明显我错过了怎么做?
我可以得到这样的用户(来自示例):
final AuthUser u = PlayAuthenticate.getUser(session());
但我真正需要的是
OAuth2AuthUser.getOAuth2AuthInfo().getAccessToken()
我无法将AuthUser
强制转换为OAuth2AuthUser
。那怎么办呢?
答案 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,最后更新当前用户服务插件。