[英]Multiple authentication options with Tornado
剛開始玩Tornado並希望提供多種身份驗證方法。 目前,我的應用程序與使用tornado.auth.GoogleMixin的Google混合OpenID / oAuth工作正常,未經身份驗證的用戶會自動發送到Google的身份驗證頁面。
如果未經身份驗證的用戶想要使用其他選項(即local auth或tornado.auth.TwitterMixin),我如何實現邏輯以在登錄處理程序中選擇auth機制?
我將裝飾器'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提供商網址,通常情況並非如此。我猜你是否給了他們一個google / facebook / twitter圖標或點擊的內容會讓人感到困惑人數。
我自己發現了這個問題,但情況略有不同。
一種解決方案實際上是做這樣的事情。
class AuthLoginHandler(BaseHandler, tornado.auth.GoogleMixin, tornado.auth.TwitterMixin):
def get(self):
if want_google:
tornado.auth.GoogleMixin.get_authenticated_user(self)
#...
elif want_twitter:
tornado.auth.TwitterMixin.get_authenticated_user(self)
#...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.