大飞

大飞 关注TA

挑战一切!

大飞

大飞

关注TA

挑战一切!

  • 加入社区3,268天
  • 写了333,609字

该文章投稿至Nemo社区   Python  板块 复制链接


Tornado 用户验证

发布于 2018/11/24 15:19 2,012浏览 0回复 2,069

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):
          ......



项目参考地址:https://github.com/tzz2015/DTF/tree/develop

本文标签
 {{tag}}
点了个评