在龙卷风python中设置openId

Jak*_*yer 3 python openid document tornado

嘿所有......我一直在阅读龙卷风文档,并遇到了开放的id 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")
Run Code Online (Sandbox Code Playgroud)

其中没有显示更大的图片,如路线,appsettings等等#用例如set_secure_cookie()保存用户

所以我的问题是.这如何适应龙卷风网站的大局.

Iva*_*kov 6

此处理程序不依赖于应用程序的其他部分,您只需将其设置为url conf中的"/ login/google"之类的内容,并在您网站的某个位置放置此URL的链接.

用户点击它并被重定向到谷歌身份验证页面(如果它已退出谷歌)或要求授予访问他/她的基本信息的权限的页面.如果用户接受-浏览器被重定向回这个网址的处理程序和控制来_on_auth方法,用户对象,如果存在的话,包含了用户的电子邮件,名称,位置设置和一堆其他的东西的字典(只转储这个变量记录以查看所有内容).

此时,您可以使用此数据执行任何操作,但通常它看起来像这样:

  1. 检查您是否在数据库中拥有此电子邮件的用户
  2. 如果你有:你检索它的id并将其设置为他的(安全)cookie
  3. 如果它不存在:您使用提供的数据创建它,保存到数据库,可选地发送带有自动生成密码的电子邮件并设置cookie
  4. 在您的应用程序中的其他位置重定向:到他的个人资料,主页或您需要的任何内容
  5. 现在你的用户在所有其他处理程序中都有cookie,通常你会在覆盖RequestHandler.get_current_user方法时使用它