我正在使用Google登录并获取用户电子邮件和令牌ID。我正在捕获JavaScript函数中的值,这是正常的。这是使用的代码段。我有一个需要这些数据的http servlet类。
<div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark" onSubmit=></div>
<script>
function onSignIn(googleUser) {
// The ID token you need to pass to your backend:
var id_token = googleUser.getAuthResponse().id_token;
console.log("ID Token: " + id_token);
//send to backend
postIt(id_token);
};
function postIt(id_token) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML = this.responseText;
}
}
xhttp.open("POST","index.jsp", true );
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("id_token");
}
</script>
我的Servlet看起来像这样:
public class TestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id_token;
String email;
id_token=request.getParameter("id_token");
HttpSession session=request.getSession(true);
System.out.println("all is ok");
try {
System.out.print(id_token);
} catch (Exception e) {
e.printStackTrace();
}
}
}
我在浏览器控制台中得到了未被捕获的TypeError。我认为问题出在postIt函数中。 我无法理解如何将id_token值发送到servlet。有人可以请更正我的代码吗?
答案 0 :(得分:1)
快速浏览后,我在您的代码中看到了三个问题:
#demo
元素(或您尚未提供)。XMLHttpRequest
到您的特定课程。id_token
发送到服务器,只发送参数。<强>代码:强>
/* Open the request to the servlet. */
xhttp.open("POST", "TestServlet", true);
/* Send the token to the server mapped to the 'id_token' parameter. */
xhttp.send("id_token=" + id_token);