Tornado を使い始めたばかりで、複数の認証方法を提供したいと考えています。現在、私のアプリは tornado.auth.GoogleMixin を使用して Google のハイブリッド OpenID/oAuth で正常に動作しており、認証されていないユーザーは自動的に Google の認証ページに送信されます。
認証されていないユーザーが別のオプション (つまり、ローカル認証または tornado.auth.TwitterMixin) を使用したい場合、ログイン ハンドラー内で認証メカニズムを選択するロジックを実装するにはどうすればよいですか?
デコレーター「tornado.web.authenticated」をすべての公開メソッドに追加しました。現在 Google OpenID/oAuth で動作しているログイン ハンドラー クラス (Tornado の例からほぼそのまま) を次に示します。
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('/')
解決策の提案をお待ちしております。ありがとう