2017-12-10 8 views
0

私は、Python言語で竜巻のWebフレームワークを使用しています。 私は、ユーザーがウェブサイトを使用することが許可されている場合竜巻オブジェクトのユーザーのクッキーをオリエンタルにチェックする方法は?

class childClass(parentClass): 
self.write("you have permission") 

はどのようにチェックすることができるよう、私は子クラスを作りたいその後例

class parentClass(tornado.web.RequestHandler): 
def get(self): 
    cookie = self.get_cookie("cookie") 

の名前が付いた親クラスを作りたいです親クラス?親クラスから子クラスを制御するにはどうすればよいですか?

答えて

1

あなたのユースケースは、これは完全にあなたのハンドラでセキュアなアクセスを持ついずれかの方法で@tornado.web.authenticatedデコレータを使用して竜巻に処理されたユーザ認証である場合。 これは私が応じtornado documentation

から取られている下の抜粋を参照してくださいあなたはより多くの情報と作業コードの場合(あなたの例では、あなたのParentClassだろう)基底クラス

に実装することができますハンドラのget_current_userメソッドを呼び出します。

ユーザ認証

は、現在認証されたユーザはself.current_userとして、およびCURRENT_USERなど、すべてのテンプレート内のすべての要求ハンドラ で利用可能です。 デフォルトでは、current_userはNoneです。

アプリケーションでユーザー認証を実装するには、 リクエストハンドラのget_current_user()メソッドをオーバーライドして、 に、たとえばCookieの値に基づいて現在のユーザーを決定する必要があります。

class BaseHandler(tornado.web.RequestHandler): 
    def get_current_user(self): 
     return self.get_secure_cookie("user") 

class MainHandler(BaseHandler): 
    def get(self): 
     if not self.current_user: 
      self.redirect("/login") 
      return 
     name = tornado.escape.xhtml_escape(self.current_user) 
     self.write("Hello, " + name) 

class LoginHandler(BaseHandler): 
    def get(self): 
     self.write('<html><body><form action="/login" method="post">' 
        'Name: <input type="text" name="name">' 
        '<input type="submit" value="Sign in">' 
        '</form></body></html>') 

    def post(self): 
     self.set_secure_cookie("user", self.get_argument("name")) 
     self.redirect("/") 

application = tornado.web.Application([ 
    (r"/", MainHandler), 
    (r"/login", LoginHandler), 
], cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__") 

あなたはユーザーは、Pythonを使用してログインする必要ができます:ここで は、ユーザーがその後、クッキーに保存されているニックネームを指定する するだけでアプリケーションにログインすることができます例です。デコレータ はtornado.web.authenticated。要求がこの デコレータとメソッドとなり、ユーザーがログインしていない場合、彼らは LOGIN_URL(他のアプリケーションの設定)にリダイレクトされます。

class MainHandler(BaseHandler): 
    @tornado.web.authenticated 
    def get(self): 
     name = tornado.escape.xhtml_escape(self.current_user) 
     self.write("Hello, " + name) 

settings = { 
    "cookie_secret": "__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__", 
    "login_url": "/login", 
} 
application = tornado.web.Application([ 
    (r"/", MainHandler), 
    (r"/login", LoginHandler), 
], **settings) 
:上記の例では 書き直すことができ
関連する問題