Проблемы с UserService на Google App Engine - PullRequest
4 голосов
/ 06 января 2010

Я пытаюсь написать приложение для Google App Engine, которое было бы доступно только для меня. (Я знаю, это звучит странно ... на данный момент) Я пытаюсь написать сервлет входа в систему, который бы аутентифицировал пользователя с помощью Google's 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 и выйду из него и снова вызову этот сервлет, он по-прежнему показывает сообщение «выполнено». Я ожидал, что приложение снова запросит у меня вход в систему .. чего не происходит .. Я думал, что это происходит, потому что в результате получается кэширование и отключено кэширование (1-я строка в методе) ... но проблема сохраняется даже после что .. что не так? Как мне получить ожидаемое поведение?

Ответы [ 2 ]

2 голосов
/ 06 января 2010

Ты не. Если вы хотите, чтобы пользователь вышел из вашей службы, он должен выйти из вашей службы (вызвав метод выхода из UserManager). Тот факт, что они сообщают имя пользователя и пароль другим службам Google, не означает, что выход из этих служб автоматически выполняет их отключение от ваших.

0 голосов
/ 09 марта 2012

Я не уверен в этом, но когда вы входите в первый раз, чтобы "appengine" приложение, вы должны предоставить привилегии для доступа к информации вашего профиля (я думаю, что это стандарт OAuth). Вы можете ограничить это количеством дней. После этого страница может автоматически считывать вашу электронную почту, ник и Google ID, пока не истечет право доступа.

Способ обойти это состоит в том, чтобы реализовать собственный механизм сеанса и использовать google login только для того, чтобы получить userId (и из этого вашего внутреннего объекта профиля), чтобы начать сеанс (он же login).

Если вы хотите выйти только со своей страницы - вы просто убьете сеанс, а не выйдете из учетной записи Google

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...