繁体   English   中英

Google App Engine上的UserService问题

[英]Problems with UserService on google app engine

我正在尝试为Google App Engine编写一个仅对我自己可用的应用程序。 (我暂时只知道这听起来很奇怪。)我正在尝试编写一个登录servlet,该服务器将使用google的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("aaadith@gmail.com")) {
                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,它仍然显示消息“完成”。 我原以为该应用会提示我再次登录..这没有发生..我以为发生这种情况是因为结果被缓存了,因此禁用了缓存(方法中的第一行)...但是问题仍然存在那..怎么了? 如何获得预期的行为?

你不知道 如果要用户注销服务,则他们需要注销服务(通过调用UserManager的注销方法)。 他们与其他Google服务共享用户名和密码的事实并不意味着注销这些其他服务会自动将其注销。

我对此不太确定,但是当您首次登录“ appengine”应用程序时,必须授予访问您的个人资料信息的权限(我认为这是OAuth标准)。 您可以将其限制为天数。 之后,该页面可以自动读取您的电子邮件,昵称和Google ID,直到访问权限到期为止。

解决此问题的方法是实现您自己的会话机制,并使用Google登录名只是为了检索userId(并从您的内部配置文件对象中)来启动会话(也称为登录名)。

如果您只想从页面中注销,则只会终止会话,而不是从google用户帐户中注销

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM