版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ka_Ka314/article/details/81476877
authenticated装饰器
为了使用Tornado的认证功能,我们需要对登录用户标记具体的处理函数。我们可以使用@tornado.web.authenticated装饰器完成它。当我们使用这个装饰器包裹一个处理方法时,Tornado将确保这个方法的主体只有在合法的用户被发现时才会调用。
class IndexHandler(tornado.web.RequestHandler):
@tornado.web.authenticated
def get(self):
self.xsrf_token
self.render("index.html")
get_current_user()方法
装饰器@tornado.web.authenticated的判断执行依赖于请求处理类中的self.current_user属性,如果current_user值为假(None、False、0、""等),任何GET或POST请求都将把访客重定向到应用设置中login_url指定的URL,而非法用户的POST请求将返回一个带有403(Forbidden)状态的HTTP响应。
在获取self.current_user属性的时候,tornado会调用get_current_user()方法来返回current_user的值。也就是说,我们验证用户的逻辑应写在get_current_user()方法中,若该方法返回非假值则验证通过,否则验证失败。
class IndexHandler(tornado.web.RequestHandler):
# 由于使用了装饰器tornado.web.authenticated,需要重写get_current_user()
# 用于校验用户登录信息,此处返回Flase进行登录拦截
def get_current_user(self):
# 此处用于完成验证用户信息
f = True
if f:
return True
else:
return False
# 默认调用get_current_user()方法
@tornado.web.authenticated
def get(self):
self.xsrf_token
self.render("index.html")
login_url设置
当用户验证失败时,将用户重定向到login_url上,所以我们还需要在Application中配置login_url。
if __name__ == '__main__':
tornado.options.parse_command_line()
settings = dict(
cookie_secret="yyyyyyyyyyyy",
login_url="/login",
debug=True
)
app = tornado.web.Application([
(r"/", IndexHandler),
(r"/login", LoginHandler),
], **settings)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(8000)
tornado.ioloop.IOLoop.current().start()
Next参数
在login_url后面补充的next参数就是记录的跳转至登录页面前的所在位置,所以我们可以使用next参数来完成登陆后的跳转。
class LoginHandler(tornado.web.RequestHandler):
def get(self):
next_url = self.get_argument("next","/")
if next_url:
print(next_url)
self.redirect(next_url + "?f=login")
else:
self.write("登陆页面")