3

play-authenticate を使用して、Google Oauth2 でユーザーをログインさせています。ここで、いくつかの Google API を使用できるように、アクセス トークンを取得したいと考えています。

誰か助けてくれませんか?私がそれを行う方法を見逃しているのは明らかですか?

このようなユーザーを取得できます(例から):

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

しかし、私が本当に必要としているのは、

OAuth2AuthUser.getOAuth2AuthInfo().getAccessToken()

AuthUserをとしてキャストできませんOAuth2AuthUser。どうすればそれを行うことができますか?

4

1 に答える 1

1

UserServicePluginのupdateメソッドをオーバーライドするソリューションを考え出しました。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 に答える