Настройка openId в торнадо Python - PullRequest
3 голосов
/ 28 марта 2011

Привет всем ... Я читал документацию по торнадо и наткнулся на открытый идентификатор mixin, поэтому я подумал про себя: "Не злой, не ужасная система паролей на моей стороне", затем я посмотрел, как ее реализовать, единственный пример, который я пришел через это было

class GoogleHandler(tornado.web.RequestHandler, tornado.auth.GoogleMixin):
    @tornado.web.asynchronous
    def get(self):
        if self.get_argument("openid.mode", None):
            self.get_authenticated_user(self.async_callback(self._on_auth))
            return
        self.authenticate_redirect()

    def _on_auth(self, user):
        if not user:
            raise tornado.web.HTTPError(500, "Google auth failed")

Который не показывает большую картину, например, маршруты, настройки приложений и т. Д. И т. Д. # Сохранить пользователя, например, set_secure_cookie ()

Итак, мой вопрос. Как это вписывается в общую картину торнадо.

1 Ответ

6 голосов
/ 06 ноября 2011

Этот обработчик не зависит от других частей приложения, вы просто устанавливаете его на что-то вроде '/ login / google' в url conf и размещаете ссылку на этот URL-адрес где-то на вашем сайте.

Пользователь нажимает на нее и перенаправляется на страницу авторизации Google (если она вышла из Google) или на страницу с просьбой разрешить доступ к своей основной информации. Если пользователь принимает - браузер перенаправляется обратно на этот обработчик URL-адреса и управление переходит к методу _on_auth , где объект пользователя, если он присутствует, содержит диктовку с адресом электронной почты пользователя, именем, настройками местоположения и кучей других вещей. (просто дамп этой переменной в журналы, чтобы увидеть все это).

На данный момент вы можете делать с этими данными все, что хотите, но в целом это может выглядеть примерно так:

  1. проверьте, есть ли у вас пользователь с этим адресом электронной почты в базе данных
  2. если у вас есть: вы извлекаете его идентификатор и устанавливаете его для его (безопасных) файлов cookie
  3. если его нет: вы создаете его с предоставленными данными, сохраняете в базу данных, дополнительно отправляете электронное письмо с автоматически сгенерированным паролем, а также устанавливаете cookie
  4. перенаправить куда-нибудь еще в вашем приложении: на его профиль, домашнюю страницу или что вам нужно
  5. теперь у вашего пользователя есть файл cookie, доступный во всех других обработчиках, обычно вы будете использовать его при переопределении метода RequestHandler.get_current_user
...