Ограничить один сеанс для пользователя в учетной записи Google - PullRequest
2 голосов
/ 02 июня 2010

Можно ли заставить Google создать только один сеанс для одного пользователя?

Я создал службы в GAE, которые используют идентификатор Google для аутентификации пользователей. Теперь один пользователь создает несколько сеансов с нескольких компьютеров путем совместного использования его имя пользователя / пароль. Я хочу ограничить это.

На простом языке после успешного входа в систему приложение должно выйти из всех остальных сеанс для этого пользователя.

В gmail внизу страницы есть ссылка с названием последней активности. При нажатии на детали он показывает текущие сеансы, а также дает возможность выйти из других сессия. Я хочу такую ​​же функциональность программно.

Существует еще одна опция: перед входом в систему определите, вошел ли пользователь в систему. на

Посмотрите на это

http://mail.google.com/support/bin/answer.py?ctx=%67mail&answer=45938

см. Параллельные сеансы

Если к этой информации можно будет как-то получить доступ, я могу предпринять соответствующие действия.

Ответы [ 2 ]

3 голосов
/ 02 июня 2010

Это, конечно, возможно.

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

Если вы хотите отслеживать несколько сеансов входа в систему, вы можете написать обработчики, предназначенные для запуска после входа или выхода из системы. Если ваш обычный URL возврата после входа в систему - "/ do_stuff", вы можете изменить его на "/ finish_login? Next =% 2Fdo_stuff". В этом обработчике вы можете создать сущность в хранилище данных, представляющую сеанс, со ссылкой на учетную запись Google, IP-адрес, который вошел в систему, и метку времени входа в систему (текущую метку времени). Вы можете записать ключ сущности сеанса в другой файл cookie в браузере пользователя. После того, как вы закончите, перенаправьте на «следующий» URL.

После выхода из системы у вас может быть подобный обработчик, который проверяет наличие файла cookie ключа сущности сеанса, удаляет сущность и удаляет cookie.

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

Если вы хотите удаленно выйти из другого сеанса, вам может потребоваться написать собственную версию декоратора login_required, которую Google предлагает в webapp.util. Ваша версия должна будет подтвердить, что пользователь вошел в систему, проверить, что отправил куки-файл сессионного ключа, и убедиться, что связанный объект все еще существует и принадлежит правильной учетной записи.

2 голосов
/ 02 июня 2010

Ничто не мешает вам хранить данные для входа в службу данных Google App Engine. Как следствие, вы можете сохранить все данные для входа в систему пользователя в связанном с ним объекте. Как следствие, я бы сказал, что нет никакой разницы между GAE и традиционным веб-приложением - за исключением того, что вы будете хранить информацию о входе в систему в базе данных вместо того, чтобы ваш веб-интерфейс обрабатывал ее.

...