这是我的问题。
我正在使用JAVA中的Google App引擎开发网络应用。
我已经在网上搜索了很多问题的答案,给出了各种解决方案,但没有一个对我有用,我仍然得到:
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Insufficient Permission",
"reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission"
}
我正尝试从我的帐户向其他电子邮件地址发送一封邮件(作为测试,从我发送给我)。 我已经成功实现了表格API,但记得我必须先经过一个同意屏幕,但是现在我真的不知道如何再次弹出此屏幕来永久验证范围,让我自己解释一下。
我有两个凭证文件。
我已经测试了各种范围,添加了另一个凭据文件,但没有成功。请告诉我您是否需要一些代码。
编辑
只是删除了我的Sheets API凭据,还删除了我的应用程序以链接到我的帐户,现在我无法弹出同意屏幕。然后我得到:
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_grant",
"error_description" : "Token has been expired or revoked."
}
我正在使用此代码获取凭据
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
// Load client secrets.
InputStreamReader in = new InputStreamReader(new FileInputStream(new File("WEB-INF/credentials.json")));
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, in);
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
.setAccessType("offline")
.build();
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}
但是Google文档说:
授权信息存储在文件系统上,因此后续 执行将不会提示授权。
在哪里可以删除存储的文件系统?
非常感谢您的帮助
答案 0 :(得分:0)
经过数小时的混乱之后,我终于有了一个无法解释的解决方案。
我从this page删除了我的应用
然后将我的代码更改为
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
对此
return new AuthorizationCodeInstalledApp(flow, receiver).authorize(null);
显示同意屏幕。
然后,在验证我的应用程序后,我遇到了NullPointerException
错误,因此我将同一行改回了该行
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("myemail@gmail.com");
如果它不起作用(我想这是缓存问题)
对此
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("me");
不要问我为什么,但这确实起作用。 仍然欢迎您提供有关此行为的更多详细信息。