我使用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
答案 0 :(得分:2)
刷新令牌仅在初始授权时发出(每当显示同意屏幕时)。如果您发现自己处于没有为用户保存刷新令牌的状态,您可以要求重新授权添加的查询参数提示=同意。将要求用户重新授权,并将生成新的刷新令牌。
答案 1 :(得分: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云端硬盘中文件的网址。当您获得文件 - thee the documentation时,您会在com.google.api.services.drive.model.File对象中找到下载方法。阅读documentations