Tornado 用户身份验证框架

Posted Erick - LONG

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tornado 用户身份验证框架相关的知识,希望对你有一定的参考价值。

1、安全cookie机制

import tornado.web

session_id = 1
class MainHandler(tornado.web.RequestHandler):

    def get(self):
     global session_id 
if not self.get_cookie(session): self.set_cookie(session,str(session_id)) session_id = session_id + 1 self.write(你设置了一个新的session) else: self.write(你已经获取了session)

为了防止客户端篡改,随意解析cookie的键值

import tornado.web
import tornado.ioloop
session_id = 1
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        global session_id
        if not self.get_secure_cookie(session):
            self.set_secure_cookie(session,str(session_id))
            session_id = session_id+1
            self.write(你设置了一个新的session)
        else:
            self.write(你已经获取了session)
application = tornado.web.Application([(r/,MainHandler),],cookie_secret = mimi) # 设置密钥

def main():
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()

if __name__ ==__main__:
    main()

2、用户身份认证

tornado和flask一样,在requestHandler中current_user保存当前请求用户名,但默认值时空,需要用requestHandler.get_current_user属性设置该属性

import tornado.web
import tornado.ioloop
import uuid  # uuid生成库

dict_sessions = {}  # 保存所有登陆的session

class BaseHandler(tornado.web.RequestHandler):
    def get_current_user(self):  # 写入current_user函数
        session_id = self.get_secure_cookie(session)
        return dict_sessions.get(session_id)

class MainHandler(BaseHandler):
    @tornado.web.authenticated  # 需要身份认证才能访问的处理器
    def get(self):
        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):
        if len(self.get_argument(name)) < 3:
            self.redirect(/login)
        session_id = str(uuid.uuid1())
        dict_sessions[session_id] = self.get_argument(name)
        self.set_secure_cookie(session_id, session_id)
        self.redirect(/)

application = tornado.web.Application([(r/, MainHandler), (r/login, LoginHandler), ], cookie_secret=mimi,
                                      login_url=/login)

def main():
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()

if __name__ == __main__:
    main()

 

以上是关于Tornado 用户身份验证框架的主要内容,如果未能解决你的问题,请参考以下文章

抽屉之Tornado实战--装饰器实现用户登录状态验证

教程4 - 验证和权限

如何在Tornado中获取请求的身份验证标头

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

第二百七十一节,Tornado框架-CSRF防止跨站post请求伪造

第七章:外部服务认证