2

トルネードを使用して、Twitterなどのサードパーティで認証しています。

私のログインハンドラは次のようになります

class AuthLoginHandler(BaseHandler, tornado.auth.TwitterMixin, tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self):
        if self.get_argument('oauth_token', None):
            self.get_authenticated_user(self.async_callback(self._on_auth))
            return
        self.authorize_redirect("/auth/login")
        return

    def _on_auth(self, user):
        if not user:
            raise tornado.web.HTTPError(500, "Twitter auth failed")
        self.set_secure_cookie("user", tornado.escape.json_encode(user))
        return

私の質問は、安全なCookieを設定した後、_on_authにリダイレクトステートメントが必要ですか?戻らないので、呼び出し元の関数に戻ります。この認証ハンドラーは、ログインデコレーターによって呼び出されています。また、ほとんどの例で/ auth / login?next=のnextの意味は何ですか。

4

1 に答える 1

4

はい、自分をリダイレクトする必要があります。_on_authは非同期で呼び出されるのでreturn、呼び出し元の関数に移動しません。これで完了です。

に関して/auth/login?next=xxxは、次のパラメータは、リクエストが最初にログインページにリダイレクトされた元のページに設定されます。_on_authリダイレクトに成功すると使用されます。

の最後に_on_auth、次のコマンドでリダイレクトします。

self.redirect(self.get_argument('next', '/'))
于 2012-06-25T16:22:18.240 に答える