在龙卷风python中设置openId

时间:2011-03-27 20:07:57

标签: 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")

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

保存用户

所以我的问题是。这如何适应龙卷风现场的大局。

1 个答案:

答案 0 :(得分:6)

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

用户点击它并被重定向到谷歌身份验证页面(如果它已退出谷歌)或要求授予访问他/她的基本信息的权限的页面。如果用户接受 - 浏览器被重定向回此url处理程序并且控制权转到 _on_auth 方法,其中用户对象(如果存在)包含带有用户电子邮件,名称,位置设置和其他一堆的dict stuff(只需将此变量转储到日志中即可查看所有内容)。

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

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