gpt4 book ai didi

python - Tornado 的多个身份验证选项

转载 作者:太空狗 更新时间:2023-10-29 20:52:54 30 4
gpt4 key购买 nike

刚开始玩 Tornado,想提供多种身份验证方法。目前我的应用程序使用 tornado.auth.GoogleMixin 与谷歌的混合 OpenID/oAuth 一起工作正常,未经身份验证的用户会自动发送到谷歌的授权页面。

如果未经身份验证的用户想要使用其他选项(即本地身份验证或 tornado.auth.TwitterMixin),我如何在登录处理程序中实现选择身份验证机制的逻辑?

我将装饰器“tornado.web.authenticated”添加到我所有公开的方法中,这是我的登录处理程序类(几乎直接来自 Tornado 示例),它目前正在使用 Google OpenID/oAuth:

class AuthLoginHandler(BaseHandler, 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

## redirect after auth
self.authenticate_redirect()

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

## auth success
identity = self.get_argument('openid.identity', None)

## set identity in cookie
self.set_secure_cookie('identity', tornado.escape.json_encode(identity))
self.redirect('/')

感谢对解决方案的任何建议。谢谢

最佳答案

我认为最简单的方法是将 AuthLoginHandler 更改为更具体的内容,例如 GoogleAuthHandler,并为此创建适当的路由:

(r"/login/google/", GoogleAuthHandler),
(r"/login/facebook/", FacebookAuthHandler),

然后只需在页面 ala 上创建指向每个身份验证提供程序的链接:

<a href="/login/google/>Login with Google</a>
<a href="/login/facebook/">Login with Facebook</a>

如果你想让它更漂亮,你可以提供提供者作为一个选择框,或者如果你真的想变得更漂亮,你可以解析他们的“openid”URL(例如,如果 username.google.com,self. redirect("/login/google"),但这假设用户知道他们的 OpenID 提供商 URL,但通常情况并非如此。我猜如果你给他们一个 google/facebook/twitter 图标或点击它的东西让最少的人感到困惑。

关于python - Tornado 的多个身份验证选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885085/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com