UserService извлекает неправильного пользователя после выхода из системы

#java #google-app-engine #authentication

#java #google-app-engine #аутентификация

Вопрос:

Я получаю CurrentUser от UserService

  UserServiceFactory.getUserService().getCurrentUser().getEmail()
  

Это работает, когда. Но когда я выхожу из системы, UserService по-прежнему возвращает то же электронное письмо.

Комментарии:

1. Это в развернутом приложении или локально? Используете ли вы учетные записи Google для входа в систему (или федеративный вход)? Убедитесь, что вы полностью вышли из Google, например, перейдите в gmail или какой-либо другой сервис Google и убедитесь, что вы не вошли в систему там.

2. @planetjones, я развернул его на GAE и убедился, что я выхожу из Google. Я использую учетную запись Google из определенного домена (не gmail.com ).

3. Просто очистите cookie вашего браузера и попробуйте.

4. Да, я могу только подтвердить то, что говорит @Abdul Kader — у меня было какое-то странное поведение с GAE и его аутентификацией, очистите все файлы cookie и закройте браузер, затем снова откройте его

5. @Abdul Kader, @planetjones С очисткой файлов cookie это работает хорошо.

Ответ №1:

Предполагая, что вы входите в систему обычным способом для GAE, в конечном итоге в вашем браузере будет два сессионных файла cookie — один для Google и один для приложения.

Если вы также выходите из системы обычным способом (URL для выхода из create_logout_url ), то оба файла cookie удаляются.

Однако, если пользователь переходит из вашего приложения в какой-либо другой сервис Google и выходит из Google оттуда, то cookie для вашего приложения не удаляется (по крайней мере, не для меня в Firefox). Я не уверен, что это вообще возможно — как только браузер будет удален от вашего приложения, вполне возможно, это не позволит сайтам Google каким-либо образом касаться файлов cookie вашего приложения.

Исправление должно заключаться в том, чтобы предоставить ссылку для выхода из вашего приложения, и чтобы пользователь мог выйти из системы, используя это. Если вы уже это делаете, то я не знаю, в чем проблема…

Комментарии:

1. Спасибо. Раньше я выводил пользователя из системы, перенаправляя на google.com/accounts/Logout . На самом деле, я не хочу синхронизировать сеанс входа в систему с Google, как вы описываете. Я думаю, что могу реализовать это, удаляя некоторые файлы cookie для каждого запроса, но я надеюсь, что есть другой удобный способ.

Ответ №2:

Это отвечает на все. Похоже, что, хотя вы, возможно, уже вышли из службы Google, ваш браузер все еще сохранял cookie для службы Google. Вот почему он снова отправлял то же электронное письмо пользователя..