Tornado框架提供tornado.web.authenticated用户认证体系,使用方法也很简单。
1.在登录逻辑调用 self.set_secure_cookie(key, vulue)
2.需用认证的方法添加decorator注解@tornado.web.authenticated
@tornado.web.authenticated
def get(self):
"""
3.如果需要获取用户信息调用self.get_secure_cookie(key)
获取用户实例可以写到BaseHandler里面,方便调用
class BaseHandler(tornado.web.RequestHandler):
def get_current_user(self):
return self.get_secure_cookie(key)
4.通过@tornado.web.authenticated注解的方法,如果用户没有登录,会默认掉跳转到‘/login’页面,如需要配置如下:
settings = {
"cookie_secret": "61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=",
"login_url": "/login",
}
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[
(r"/login", UserLogin),
(r"/userList", UserList),
(r"/logout", UserLogout),
(r'/createAndEdit', CreateUser),
(r'/delete', UserDelete)
], debug=True, **settings)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
5.自定义注解函数,如果是前后端分开的项目,通过@tornado.web.authenticated并不太符合需求,而是想通过返回统一的json格式,那么就需要自定义decorator,如下我统一返回401错误
# 登录验证 如果没有登录就返回统一格式
def login_required(func):
def decorator(self, *args, **kwargs):
if not self.current_user:
return self.write(result_format(None, msg='用户没有登录', error_code=401))
return func(self, *args, **kwargs)
return decorator
def result_format(data, msg='服务器错误', error_code=400):
if data is None:
r = {
'code': error_code,
'msg': msg,
'data': None
}
return r
else:
r = {
'code': 200,
'msg': '操作成功',
'data': data
}
print(r)
return r
在需要的方法使用
class UserList(BaseHandler):
@login_required
def get(self):
......