Использование сервиса пользователей GAE - не получается «войти как другой пользователь» - PullRequest
3 голосов
/ 07 июля 2011

Я использую сервис пользователей GAE для механизма входа / выхода, с create_login_url и т. Д., И все работает нормально. Кстати, я использую федеративную опцию OpenID.

Но у меня есть одна проблема - поскольку служба users проверяет user = users.get_current_user (), то, если пользователь входит в свой gmail, он автоматически регистрирует его в моем сервисе. Это нормально, но что, если другой пользователь захочет войти? как я могу перенаправить пользователя на страницу, такую ​​как «войти как другой пользователь»?

Я попытался удалить созданный файл cookie, и он был удален:

  if not (self.request.cookies.has_key('ACSID')):
        logging.debug('no cookies')
        self.redirect(users.create_login_url(self.request.uri))
        return

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

Есть идеи?

1 Ответ

2 голосов
/ 07 июля 2011

Лучшее, о чем я могу думать, это;Вы можете попробовать показать ссылку на /_ah/login_required, которая вызовет страницу входа OpenID и (надеюсь) также содержит кнопку «войти как кто-то еще».

Это не полностью решает проблему, так какпроблема осложняется несколькими поставщиками openid.

Невозможно заставить кого-либо выйти из сайта своего провайдера AFAIK.

Полный пример создания страницы входа / это не я:

Добавьте путь входа в систему к вашему app.yaml

- url: /_ah/login_required
  script: app.py

Создайте обработчик входа OpenID для создания подходящего URL-адреса входа

class OpenIDHandler(webapp.RequestHandler):
    def get(self):
        """Begins the OpenID flow/Google Apps discovery"""
        self.redirect(users.create_login_url(
            dest_url='http://yourappid.appspot.com',
            _auth_domain=None,
            federated_identity=self.request.get('domain')))

Добавьте обработчик OpenID вваше приложение wgsi (вероятно, main.py):

def main():
    ROUTES = [
        ('/_ah/login_required',      handlers.OpenIDHandler),
    ]
    application = webapp.WSGIApplication(ROUTES, debug=True)
    util.run_wsgi_app(application)
if __name__ == '__main__':
  main()

Теперь вы можете посещать /_ah/login_required всякий раз, когда вы хотите, чтобы кто-то получил запрос на вход в систему (или на странице «это не я»)

...