1、安全cookie机制

  1. import tornado.web
  2.  
  3. session_id = 1
  4. class MainHandler(tornado.web.RequestHandler):
  5.  
  6. def get(self):
         global session_id 
  7. if not self.get_cookie('session'):
  8. self.set_cookie('session',str(session_id))
  9. session_id = session_id + 1
  10. self.write('你设置了一个新的session')
  11. else:
  12. self.write('你已经获取了session')

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

  1. import tornado.web
  2. import tornado.ioloop
  3. session_id = 1
  4. class MainHandler(tornado.web.RequestHandler):
  5. def get(self):
  6. global session_id
  7. if not self.get_secure_cookie('session'):
  8. self.set_secure_cookie('session',str(session_id))
  9. session_id = session_id+1
  10. self.write('你设置了一个新的session')
  11. else:
  12. self.write('你已经获取了session')
  13. application = tornado.web.Application([(r'/',MainHandler),],cookie_secret = 'mimi') # 设置密钥
  14.  
  15. def main():
  16. application.listen(8888)
  17. tornado.ioloop.IOLoop.current().start()
  18.  
  19. if __name__ =='__main__':
  20. main()

2、用户身份认证

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

  1. import tornado.web
  2. import tornado.ioloop
  3. import uuid # uuid生成库
  4.  
  5. dict_sessions = {} # 保存所有登陆的session
  6.  
  7. class BaseHandler(tornado.web.RequestHandler):
  8. def get_current_user(self): # 写入current_user函数
  9. session_id = self.get_secure_cookie('session')
  10. return dict_sessions.get(session_id)
  11.  
  12. class MainHandler(BaseHandler):
  13. @tornado.web.authenticated # 需要身份认证才能访问的处理器
  14. def get(self):
  15. name = tornado.escape.xhtml_escape(self.current_user) # 自动转义
  16. self.write('hello' + name)
  17.  
  18. class LoginHandler(BaseHandler):
  19. def get(self):
  20. self.write(
  21. '<html><body><form action="/login" method = "post">Name:<input type = "text" name = "name">:<input type = "submit" value = "sign in"></form></body></html>')
  22.  
  23. def post(self):
  24. if len(self.get_argument('name')) < 3:
  25. self.redirect('/login')
  26. session_id = str(uuid.uuid1())
  27. dict_sessions[session_id] = self.get_argument('name')
  28. self.set_secure_cookie('session_id', session_id)
  29. self.redirect('/')
  30.  
  31. application = tornado.web.Application([(r'/', MainHandler), (r'/login', LoginHandler), ], cookie_secret='mimi',
  32. login_url='/login')
  33.  
  34. def main():
  35. application.listen(8888)
  36. tornado.ioloop.IOLoop.current().start()
  37.  
  38. if __name__ == '__main__':
  39. main()

防止跨站攻击

1、在实例化tornado.web.Application传入xsrf_cookies=True参数

  1. application = tornado.web.Application([(r'/', MainHandler), (r'/login', LoginHandler), ], cookie_secret='mimi',
  2. login_url='/login',xsrf_cookies=True)

2、在每个HTML表单模板文件中为所有表单添加xsrf_form_html()函数标签

  1. <form action="/login" method="post">
  2. {% module xsrf_form_html() %}
  3. <input type="text" name="message">
  4. <input type="submit" value="post">
  5. </form>

Tornado 用户身份验证框架的更多相关文章

  1. IdentityServer4 使用OpenID Connect添加用户身份验证

    使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...

  2. 【转载】IdentityServer4 使用OpenID Connect添加用户身份验证

    使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...

  3. MVC4商城项目二:用户身份验证的实现

    用户身份验证,依赖于 forms 身份验证类:FormsAuthentication,它是一串加密的cookie 来实现对控制器访问限制和登陆页面的访问控制.它在浏览器端是这样子的: 需求:我们要实现 ...

  4. asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功。请重试。 Login控件

    原文:asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功.请重试. Login控件 现象1.asp.net使用自定义sql server身份验证数据库,在A机器新增用户A,可以登录成 ...

  5. Github官方app分析——用户身份验证模块

    这篇文章记述的是我对Giuhub官方app的用户身份验证模块的分析. Giuhub的官方app虽然是一个非常小众的程序,但是从程序的设计的角度看,这是一个非常优秀的项目.对于其用户身份验证模块,给我留 ...

  6. 写给大忙人的centos下ftp服务器搭建(以及启动失败/XFTP客户端一直提示“用户身份验证失败”解决方法)

    注:个人对偏向于底层基本上拿来就用的应用,倾向于使用安装包,直接yum或者rpm安装:而对于应用层面控制较多或者需要大范围维护的,倾向于直接使用tar.gz版本. 对于linux下的ftp服务器,实际 ...

  7. 第11章 使用OpenID Connect添加用户身份验证 - Identity Server 4 中文文档(v1.0.0)

    在本快速入门中,我们希望通过OpenID Connect协议向我们的IdentityServer添加对交互式用户身份验证的支持. 一旦到位,我们将创建一个将使用IdentityServer进行身份验证 ...

  8. asp.net的forms身份验证 单用户身份验证

    asp.net的forms身份验证  单用户身份验证 首先要配置Web.config文件 <system.web> <authentication mode="Forms& ...

  9. Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证

    Python tkinter 实现简单登陆注册 最终效果 开始界面 ​ 注册 登陆 ​ 源码 login.py # encoding=utf-8 from tkinter import * from ...

随机推荐

  1. 关于hibernate中hql语句 case when的写法

    java hql case when的用法 if(null == sorter){ hql.append(" order by m.mDate desc,case when m.mealTi ...

  2. 搬瓦工搭建SS的教程

    前言 作者写在前面的话: 应同学的要求在此分享搬瓦工搭建SS的教程,此教程只作为学习之用,因某些原因本教程不适合长期使用,在大家学习之后请删除所做的操作,谢谢. 为方便以后查看,请及时收藏:GitHu ...

  3. 基于Redis的简单分布式锁的原理

    参考资料:https://redis.io/commands/setnx 加锁是为了解决多线程的资源共享问题.Java中,单机环境的锁可以用synchronized和Lock,其他语言也都应该有自己的 ...

  4. js对象的合并

    问题情况:将2个或2个以上对象(object{....})中的属性进行合并,即最后合并为一个object{.....}传递给后端. 问题场景:多页表单数据的一同提交 解决办法:Object.assig ...

  5. 8Manage:专注企业级CRM服务应用

    [导读]经过过去一段时间的资本寒冬,中国的企业服务市场热度渐退,开始步入平稳的发展阶段.面对中国越来越多企业的管理需求,这片具有巨大的发展空间的市场蓝海.我们应该如何面对企业客户CRM的需求,并将其更 ...

  6. 黄金K线理论简述

    黄金K线理论简述 [Ⅰ]. 隐藏在K线背后的多空搏杀 黄金K线的多空搏杀理论,说到底,其核心就是研判K线时,必须从多空搏杀的角度去认知,否则仅仅从表面到表面,是无法掌握K线精髓的.具体来说,多方和空方 ...

  7. 用C#语言编写:集合管理器

    static void Main(string[] args)        {            List<int> numbers = new List<int>(); ...

  8. 代码重构--switch的惊恐现身

    switch作为条件判断(分支结构)中的一种方式,以至于我们对于它使用的频率处于较高水平的水平线上,为此我们应该使用Extra method来对这类判断条件进行抽取,另外从我自身而言,我发现我以前常常 ...

  9. 笔记:Hibernate SQL 查询

    Hibernate 支持使用原生的SQL查询,使用原生SQL查询可以利用某些数据库特性,原生SQL查询也支持将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程. ...

  10. 研华ADAM 6000系列型号枚举值

    public enum Adam6000Type    {        Non = 0,        Adam6015 = 6015,        Adam6017 = 6017,        ...