2

DREdit アプリの Oauth コードを使用して、アプリの accessToken と refreshToken を取得しました。accessToken を取得していますが、refreshToken は常に null になります。

以下のようなコードの値を出力しようとしました

authorization URL:https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force&client_id=651991573332.apps.googleusercontent.com&redirect_uri=http://www.sakshum.org/GoogleOauth&response_type=code&scope=https://www.googleapis.com/auth/drive.file%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/userinfo.profile

このコードには既に access_type=offline が含まれていますが、これが URL に含まれていないことが原因であることがわかりました。ここで他に何が間違っている可能性があるか教えてください。

ログは appEngine で次のように出力されます

[s~sakshumweb-hrd/3.368699522239285323].<stdout>: Code:4/XQ1sR1Pu5VHDqGbG9iJO10bXVCCE.Qn-L1XwrBVYaEnp6UAPFm0EmSoCXfwI

W 2013-07-10 20:20:16.294
com.google.api.client.googleapis.services.AbstractGoogleClient <init>: Application name is not set. Call Builder#setApplicationName.
I 2013-07-10 20:20:16.536
[s~sakshumweb-hrd/3.368699522239285323].<stdout>: id:113470899999229420779

I 2013-07-10 20:20:17.936
[s~sakshumweb-hrd/3.368699522239285323].<stdout>: access token:ya29.AHES6ZSP7MXaaUhMz4RO7Jm3Zkh_s1zUxJyzW_6IvfADaQ

I 2013-07-10 20:20:17.936
[s~sakshumweb-hrd/3.368699522239285323].<stdout>: refresh token:null
4

2 に答える 2

2

リフレッシュ トークンは、最初の認証時にのみ発行されます (同意画面が表示されたとき)。ユーザーのリフレッシュ トークンが保存されていない状態にあることがわかった場合は、追加されたクエリを使用して再認証を求めることができます。パラメータプロンプト=同意。ユーザーは再認証を求められ、新しい更新トークンが生成されます。

于 2013-09-17T22:32:40.063 に答える
0

リンクの後、認証コードを取得します。例えば:

https://accounts.google.com/o/oauth2/auth?access_type=offline
&approval_prompt=auto
&client_id=[your id]
&redirect_uri=[url]
&response_type=code
&scope=[access scopes]
&state=/profile

その後、将来ドライブにアクセスする場合は、リフレッシュ トークンが必要です (毎回認証トークンを要求することができます - Google などにリダイレクトします... しかし、それは良い方法ではありません。最初の使用後、資格情報をデータベースに保存する必要があります。ユーザー UID (たとえば、メールの場合もあります) したがって、この機能でドライブにアクセスする必要がある場合は、次のようにします。

static Credential exchangeCode(String authorizationCode)
      throws CodeExchangeException {
    try {
      GoogleAuthorizationCodeFlow flow = getFlow();
      GoogleTokenResponse response =
          flow.newTokenRequest(authorizationCode).setRedirectUri(REDIRECT_URI).execute();
      return flow.createAndStoreCredential(response, null);
    } catch (IOException e) {
      System.err.println("An error occurred: " + e);
      throw new CodeExchangeException(null);
    }
  }

GoogleドライブにあるファイルのURLも取得したいと思います。ファイルを取得すると、ドキュメントが表示され、com.google.api.services.drive.model.File オブジェクトでダウンロード メソッドが見つかります。ドキュメントを読む

于 2013-10-09T23:04:32.897 に答える