簡體   English   中英

Tornado的多種身份驗證選項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM