在tornado python中设置openId

发布于 2024-10-27 05:57:22 字数 643 浏览 5 评论 0原文

嘿大家...我一直在阅读龙卷风文档并遇到 open 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")

它没有显示更大的图景,例如路线、应用程序设置等 # 使用例如 set_secure_cookie() 保存用户

所以我的问题是。这如何适应龙卷风站点的大局?

Hey all... I have been reading the tornado doc and came across open id mixin so I thought to myself "Wicked no horrid password system on my side" then I looked into how to implement it, the only example I came across was this

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")

Which doesn't show the bigger picture, like routes, appsettings etc etc
# Save the user with, e.g., set_secure_cookie()

So my question is. How does this fit into the bigger picture that is a tornado site.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

任谁 2024-11-03 05:57:22

该处理程序不依赖于应用程序的其他部分,您只需将其设置为 url conf 中的“/login/google”之类的内容,然后在网站上的某个位置放置指向该 url 的链接即可。

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

此时,您可以对这些数据执行任何您想要的操作,但一般来说,它可能看起来像这样:

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

This handler does not depend on other parts of application, you just set it on something like '/login/google' in url conf and place a link to this url somewhere on your website.

User clicks on it and gets redirected to google auth page (if it's logged out of google) or to a page asking to grant permission to acces his/her basic info. If user accepts - browser gets redirected back on this url handler and control comes to _on_auth method, where the user object, if present, contains a dict with user's email, name, location settings and a bunch of other stuff (just dump this variable to logs to see all of it).

At this point you can do whatever you want with this data, but in general it can look something like this:

  1. check whether you have user with this email in database
  2. if you have: you retrieve it's id and set it to his (secure) cookies
  3. if it is not present: you create it with provided data, save to database, optionally send email with autogenerated password and also set the cookie
  4. redirect somewhere else in your application: to his profile, home page or whatever you need
  5. now your user has cookie available in all other handlers, usually you will use it while overriding RequestHandler.get_current_user method
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文