2

私は Google アプリ プロジェクトに取り組んでおり、Java oauth ライブラリ (1.10.1-beta) に少し苦労しています。

私は密接に従った:http://code.google.com/p/google-oauth-java-client/wiki/OAuth2#Authorization_code_flow

問題は、userId または userEmail をどこから取得すればよいかわからないことです。userinfo API があることは知っていますが、実際に資格情報を作成しようとしているため、userinfo API AFIAK にアクセスできません。

私のアプリケーションは localhost でうまく動作します (test@example.com ユーザーが常にそこにいるため) が、Google エンジン環境 (NullPointerException user.getUserId()) にデプロイすると惨めに失敗します。

// we ask for token because we got authCode
GoogleTokenResponse gTokenResponse = userUtils.getFlow().newTokenRequest(authCode).setRedirectUri(userUtils.getRedirectUri()).execute();

//trying to search for user email / id /  whatever
User user = UserServiceFactory.getUserService().getCurrentUser();

//user is null -> nullPointerException is thrown 
userUtils.getFlow().createAndStoreCredential(gTokenResponse, user.getUserId());

私のユースケースの欠陥を指摘するか、ヒントを教えてください。SDKのサンプル、Stackoverflow、こちらでいろいろ検索しましたが実装が少ないです。

PS: メソッドAuthorizationCodeFlow.createAndStoreCredential (...) では、資格情報に永続ストレージを使用する場合にのみ userId が必須であり、はい、それを使用しているため、私の場合は userId を null にすることはできません。

ありがとう。

4

1 に答える 1

0

ユーザーを識別 (認証) する前に、OAUTH (承認) を行っています。ログインしていないときは、ユーザーをログインページにリダイレクトする必要があります。

UserServiceFactory.getUserService().getCurrentUser() == null

これを行うには、ユーザーを loginUrl にリダイレクトします。

String loginUrl = userService.createLoginURL(request.getOriginalRef().toString());

次にユーザーがアプリにアクセスしたときに、ユーザーはログインされ、userId を尋ねることができます。

于 2012-08-10T09:23:09.807 に答える