我正在尝试编写一个仅适用于我自己的谷歌应用程序引擎应用程序。 (我知道这听起来很奇怪......我现在正在尝试编写一个登录servlet来验证用户使用谷歌的UserService,并让用户进入应用程序,只有当我登录,并会显示一条简短的消息提示注销其他所有人。谷歌应用程序引擎上的UserService问题
这是我写的代码:
public class MainPageServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
resp.setContentType("text/html");
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if (user != null) {
if(user.getEmail().equals("[email protected]")) {
resp.getWriter().println("done");
}
else {
resp.getWriter().println("Hello, " + user.getNickname()+"<br>");
resp.getWriter().println("Thanks for your interest. But this application is still not available to everybody.");
resp.getWriter().println("<a href="+UserServiceFactory.getUserService().createLogoutURL(userService.createLoginURL(req.getRequestURI()))+">Log out</a>");
}
} else {
resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
}
}
}
与“驱赶”所有其他用户的代码工作正常。但是我登录时遇到问题:登录后,它会按预期显示消息“已完成”。但是,在此之后,如果我打开其他一些Google服务并从那里注销并再次调用此servlet,它仍会显示消息“已完成”。我曾预料该应用程序会提示我再次登录..这不会发生..我认为它的发生是因为结果得到缓存和禁用缓存(方法中的第一行)......但问题仍然存在后那..什么错了?我如何得到预期的行为?
你确定吗?那不是谷歌自己的应用程序的行为。如果您打开orkut和gmail,并且如果您从任一应用程序注销,则Google也会自动将您从其他应用程序注销。其单一标志。认为UserService的行为方式与用户的应用程序完全相同。 – Aadith 2010-01-06 20:22:01
Orkut和Gmail不是App Engine应用程序。如果您不确定缓存是否存在干扰,请使用查询字符串参数并将其与“已完成”消息一起打印出来。 – 2010-01-06 21:11:20
用户只需自动登录到您的应用程序就会非常不安全,因为他们已登录到其他Google服务。想象一下,您登录了Gmail,然后通过Google访问了一些随机App Engine应用程序,并且可以阅读您的电子邮件地址。 – 2010-01-06 21:43:31