我正在用java开发一个Web应用程序。我正在使用个人域名appspot(googleappengine)。我实施了三脚OAuth。身份验证工作正常。
这里的问题是第一次运行。虽然,我登录了我的Gmail,但它没有检测到用户名。它会重定向到登录页面。登录后,我在appspot数据存储区中获取数据。但是,我无法将该数据附加到我的主页:(
我的代码就像:
Ajax调用First Request Servlet (home.html):
$(document).ready(function(){
jQuery.ajax({
type: "get",
url: "http://searcegadget2.appspot.com/RequestTokenServlet",
success: function(msg){
if(msg.search('tr') != -1){
id = msg.split('</tr>').length - 1;
$('#gadget').css('display', 'block');
$("tbody").append(msg);
difference();
}else if(msg.search('form') != -1){
$('#gadget').css('display', 'none');
document.write(msg);
}else if(msg.search('http') != -1){
$('#gadget').css('display', 'none');
document.location = msg;
}
},error: function(XMLHttpRequest, textStatus, errorThrown){
//alert(XMLHttpRequest.responseText);
}
});
});
我的表格div是 #gadget &amp;它有块块显示。正如您所看到的,我还将OAuth回调参数设置为home.html
RequestTokenServlet.java代码:
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParameters.setScope("https://spreadsheets.google.com/feeds/");
oauthParameters.setOAuthCallback("http://searcegadget2.appspot.com/home.html");
oauthParameters.setOAuthType(OAuthParameters.OAuthType.THREE_LEGGED_OAUTH);
UserService userService = UserServiceFactory.getUserService();
if (userService.isUserLoggedIn()) {
//fetch row
} else {
out.print(userService.createLoginURL(request.getRequestURI()));
}
我的意思是,appspot返回html表格行,&amp;它在任何浏览器中仅显示行。虽然我希望该行被附加到我的主页表,但我不能。
此外,只有在我第一次登录时才会发生这种情况。稍后,当我再次通过我的应用程序URL时,它会返回主页,并将该行附加到表中!但是,当我重新启动浏览器时,问题会重复出现!
我想在第一次通话时显示第二个屏幕。
如何解决此问题?有没有其他方法可以检查用户是否在Java中登录?
答案 0 :(得分:0)
您的GAE应用程序检测到您未登录谷歌是正常现象。
如果可以,那么任何GAE站点都可以在未经他们同意的情况下自动登录所有gmail用户。 OpenID / OAuth不能像这样工作 - 出于安全原因,它需要按设计进行用户交互。
<强>更新强>
如果用户未登录,则userService.isUserLoggedIn()
返回false,因此我认为没有返回HTML表。
顺便说一下,如果用户未登录,则应将其重定向到Google登录页面:
response.sendRedirect(userService.createLoginURL(req.getRequestURI()));