2

我使用 DREdit 应用程序的 Oauth 代码为我的应用程序获取 accessToken 和 refreshToken 并且我正在获取 accessToken 但 refreshToken 总是为空。

我试图打印代码中的值,如下所示

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

那么如果将来您要访问驱动器,则需要刷新令牌(您可以每次请求身份验证令牌 - 重定向到谷歌等......但这不是好方法。第一次使用后,您应该将凭证保存在数据库中用户 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 Drive 中文件的 url。当您获得文件时-您是文档,然后您会在 com.google.api.services.drive.model.File 对象中找到下载方法。阅读 文件

于 2013-10-09T23:04:32.897 回答