Python: Tornadoアプリでログイン済みユーザへの対応をするハンドラ

 TornadoでHelloWorldをやってくれるリクエストハンドラを書くと下記である。
class MainHandler(tornado.web.RequestHandler):

def get(self):
self.write("HelloWorld")


 アプリに認証機能を入れたとき、ハンドラごとに認証チェックを書くのは面倒である。そこでgetメソッドやpostメソッド内に認証チェックを自分でいちいち書いていかなくても、自動でやってくれるリクエストハンドラを継承で作った。

class AuthBaseHandler(tornado.web.RequestHandler):

def prepare(self):
self.auth()

def auth(self):
auth_token = self.get_cookie("markofcain")
if not auth_token:
raise tornado.web.HTTPError(401)

db = self.settings["db"]
doc = db.session.find_one({"_id":auth_token})
if doc is None:
raise tornado.web.HTTPError(401)
else:
self.user = doc
return True


 あとはまたこれを継承すれば目的の、認証チェックをリクエストごとにやってくれるリクエストハンドラができる。

class HelloHandler(AuthBaseHandler):

def get(self):
return "Hello " + self.user["username"]


 アドベントカレンダー二日目にして早速うすうすな記事になった。突発忘年会。
comment: 0