POST 发送电子邮件端点的请求导致 org.json.JSONException:找不到 JSONObject["oobCode"]。调用 gitkitClient.getOobResponse(request) 后;
POST Request to sendEmail endpoint causes org.json.JSONException: JSONObject["oobCode"] not found. after calling gitkitClient.getOobResponse(request);
我正在尝试在我的后端实现 "Trouble Signing In" link 端点。我按照步骤 enumerated here,通过我的 Gitkit 小部件 JavaScript 成功收到 POST 请求,但请求中似乎缺少一些信息。
一打电话
OobResponse oobResponse = Utils.getGitkitClient().getOobResponse(request);
抛出以下堆栈跟踪。为了简洁起见,我只包含前几行。
com.google.identitytoolkit.GitkitServerException: org.json.JSONException: JSONObject["oobCode"] not found.
at com.google.identitytoolkit.GitkitClient.getOobResponse(GitkitClient.java:411)
at com.google.identitytoolkit.GitkitClient.getOobResponse(GitkitClient.java:372)
at myProject.myController.sendEmail(myController.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
...
为了排除此问题的可能原因,以下是我用来获取 GitkitClient 实例的实用方法的内容:
public static GitkitClient getGitkitClient() throws FileNotFoundException {
GitkitClient gitkitClient = GitkitClient
.newBuilder()
.setGoogleClientId(Constants.CLIENT_ID)
.setServiceAccountEmail(Constants.SERVICE_ACCOUNT_EMAIL)
.setKeyStream(new FileInputStream(Constants.SERVICE_ACCOUNT_PRIVATE_KEY_FILE_PATH))
.setWidgetUrl(Constants.WIDGET_URL)
.setCookieName(Constants.COOKIE_NAME)
.build();
return gitkitClient;
}
这是我的 sendEmail 端点方法签名(我正在使用 Spring Boot):
@RequestMapping(value = "/sendEmail", method = RequestMethod.POST)
@ResponseBody
public void sendEmail(HttpServletRequest request, HttpServletResponse response) {
最后,这是传递到我的 sendEmail 方法中的 HttpServletRequest 的内容:
请求方法
POST
请求Headers
Header name: host
Header value: example.com:8080
Header name: connection
Header value: keep-alive
Header name: content-length
Header value: 1100
Header name: origin
Header value: http://example.com:8080
Header name: user-agent
Header value: Mozilla/5.0 (Linux; Android 5.0.2; HTC6500LVW Build/LRX22G; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/46.0.2490.76 Mobile Safari/537.36
Header name: content-type
Header value: application/x-www-form-urlencoded;charset=UTF-8
Header name: accept
Header value: */*
Header name: referer
Header value: http://example.com:8080/myProject/callback?mode=recoverPassword&identifier=test@test.com
Header name: accept-encoding
Header value: gzip, deflate
Header name: accept-language
Header value: en-US
Header name: x-requested-with
Header value: [MY APP PACKAGE NAME OMITTED]
请求参数
Parameter name: action
Parameter value: resetPassword
Parameter name: email
Parameter value: test@test.com
Parameter name: challenge
Parameter value:
Parameter name: response
Parameter value: 03AHJ_Vuued2d7eKM-hD[... CONTENTS OMITTED ...]G1mzdsuc8
请注意,请求参数 "challenge" 是空字符串,并且没有提及 "oobCode," 作为堆栈跟踪如此恰当地指出。
我是不是漏掉了什么?我需要在我的小部件端点中采取额外的步骤吗?我是否需要向包含 JavaScript 小部件的 HTML 文件添加更多内容?任何帮助将不胜感激!
在与 Google 中从事身份工具包工作的人交谈后,我被告知身份工具包项目在他们这一端存在错误配置。在他们进行了一些更改之后,我现在可以成功调用上述 getOobResponse(HttpServletRequest req) 方法而无需获取堆栈跟踪!
我正在尝试在我的后端实现 "Trouble Signing In" link 端点。我按照步骤 enumerated here,通过我的 Gitkit 小部件 JavaScript 成功收到 POST 请求,但请求中似乎缺少一些信息。
一打电话
OobResponse oobResponse = Utils.getGitkitClient().getOobResponse(request);
抛出以下堆栈跟踪。为了简洁起见,我只包含前几行。
com.google.identitytoolkit.GitkitServerException: org.json.JSONException: JSONObject["oobCode"] not found.
at com.google.identitytoolkit.GitkitClient.getOobResponse(GitkitClient.java:411)
at com.google.identitytoolkit.GitkitClient.getOobResponse(GitkitClient.java:372)
at myProject.myController.sendEmail(myController.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
...
为了排除此问题的可能原因,以下是我用来获取 GitkitClient 实例的实用方法的内容:
public static GitkitClient getGitkitClient() throws FileNotFoundException {
GitkitClient gitkitClient = GitkitClient
.newBuilder()
.setGoogleClientId(Constants.CLIENT_ID)
.setServiceAccountEmail(Constants.SERVICE_ACCOUNT_EMAIL)
.setKeyStream(new FileInputStream(Constants.SERVICE_ACCOUNT_PRIVATE_KEY_FILE_PATH))
.setWidgetUrl(Constants.WIDGET_URL)
.setCookieName(Constants.COOKIE_NAME)
.build();
return gitkitClient;
}
这是我的 sendEmail 端点方法签名(我正在使用 Spring Boot):
@RequestMapping(value = "/sendEmail", method = RequestMethod.POST)
@ResponseBody
public void sendEmail(HttpServletRequest request, HttpServletResponse response) {
最后,这是传递到我的 sendEmail 方法中的 HttpServletRequest 的内容:
请求方法
POST
请求Headers
Header name: host
Header value: example.com:8080
Header name: connection
Header value: keep-alive
Header name: content-length
Header value: 1100
Header name: origin
Header value: http://example.com:8080
Header name: user-agent
Header value: Mozilla/5.0 (Linux; Android 5.0.2; HTC6500LVW Build/LRX22G; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/46.0.2490.76 Mobile Safari/537.36
Header name: content-type
Header value: application/x-www-form-urlencoded;charset=UTF-8
Header name: accept
Header value: */*
Header name: referer
Header value: http://example.com:8080/myProject/callback?mode=recoverPassword&identifier=test@test.com
Header name: accept-encoding
Header value: gzip, deflate
Header name: accept-language
Header value: en-US
Header name: x-requested-with
Header value: [MY APP PACKAGE NAME OMITTED]
请求参数
Parameter name: action
Parameter value: resetPassword
Parameter name: email
Parameter value: test@test.com
Parameter name: challenge
Parameter value:
Parameter name: response
Parameter value: 03AHJ_Vuued2d7eKM-hD[... CONTENTS OMITTED ...]G1mzdsuc8
请注意,请求参数 "challenge" 是空字符串,并且没有提及 "oobCode," 作为堆栈跟踪如此恰当地指出。
我是不是漏掉了什么?我需要在我的小部件端点中采取额外的步骤吗?我是否需要向包含 JavaScript 小部件的 HTML 文件添加更多内容?任何帮助将不胜感激!
在与 Google 中从事身份工具包工作的人交谈后,我被告知身份工具包项目在他们这一端存在错误配置。在他们进行了一些更改之后,我现在可以成功调用上述 getOobResponse(HttpServletRequest req) 方法而无需获取堆栈跟踪!