本项目github地址

前端测试模板如下:

Tornado restful api 项目

项目结构如下:



项目组织类似于django,由独立的app模块构成。

登录接口设计

模式:post -> /login/

携带参数:{username:"", password:""}

返回:{token: "这里是JWT"}

Tornado集成JWT

Pyjwt的github地址

首先安装Pyjwt第三方库

$ pip install pyjwt

配置Pyjwt

jwt_expire 单位为秒,图中的表明token7天过期

接口编写如下

import jwt
class LoginHandler(BaseHandler):
'''
用户登录
post -> /login/
payload:
{
"username": "用户名或者邮箱",
"password": "密码"
}
'''
async def post(self, *args, **kwargs):
res = {} data = self.request.body.decode("utf-8")
data = json.loads(data)
form = LoginForm.from_json(data)
if form.validate():
username = form.username.data
password = form.password.data
try:
query = UserProfile.select().where(
(UserProfile.username==username) | (UserProfile.email==username)
)
user = await self.application.objects.execute(query)
try:
user = user[0]
except IndexError as e:
self.set_status(400)
res['non_fields'] = '不存在该用户'
self.finish(res)
return
if not user.password.check_password(password):
res['non_fields'] = '用户名或密码错误'
self.set_status(400)
else:
payload = {
'id': user.id,
'username': username,
'exp': datetime.utcnow()
}
token = jwt.encode(payload, self.settings["secret_key"], algorithm='HS256')
res['token'] = token.decode('utf-8')
res['username'] = username
except UserProfile.DoesNotExist:
self.set_status(400)
res['username'] = '用户不存在' else:
self.set_status(400)
for field in form.errors:
res[field] = form.errors[field] self.finish(res)

关键是这里:

payload = {
'id': user.id,
'username': username,
'exp': datetime.utcnow()
}
token = jwt.encode(payload, self.settings["secret_key"], algorithm='HS256')
res['token'] = token.decode('utf-8')
res['username'] = username

用HS256加密算法和自己的私钥来加密payload转换成token并返回。

测试接口:

成功返回数据!以后再访问需要登录的页面时,在请求头(request header)中加入这个字段就可以了!

Python Tornado集成JSON Web Token方式登录的更多相关文章

  1. Python 生成 JWT(json web token) 及 解析方式

    一.关于 jwt 的原理及概念可以自行在网络上搜索了解一下,这里推荐一篇写的比较好的博客 深入了解Json Web Token之概念篇 另附 JWT 的官方文档: https://jwt.io/int ...

  2. Spring Boot集成JSON Web Token(JWT)

    一:认证 在了解JWT之前先来回顾一下传统session认证和基于token认证. 1.1 传统session认证 http协议是一种无状态协议,即浏览器发送请求到服务器,服务器是不知道这个请求是哪个 ...

  3. django-rest-framework之 json web token方式完成用户认证

    json web token的介绍:https://blog.csdn.net/kevin_lcq/article/details/74846723 1. 安装 $ pip install djang ...

  4. Json Web Token(JWT)

    Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(Si ...

  5. 理解JWT(JSON Web Token)认证及python实践

    原文:https://segmentfault.com/a/1190000010312468?utm_source=tag-newest 几种常用的认证机制 HTTP Basic Auth HTTP ...

  6. 八幅漫画理解使用JSON Web Token设计单点登录系统

    用jwt这种token的验证方式,是不是必须用https协议保证token不被其他人拦截? 是的.因为其实只是Base64编码而已,所以很容易就被解码了.如果你的JWT被嗅探到,那么别人就可以相应地解 ...

  7. JWT(JSON Web Token) 多网站的单点登录,放弃session

    多个网站之间的登录信息共享, 一种解决方案是基于cookie - session的登录认证方式,这种方式跨域比较复杂. 另一种替代方案是采用基于算法的认证方式, JWT(json web token) ...

  8. 如何在SpringBoot中集成JWT(JSON Web Token)鉴权

    这篇博客主要是简单介绍了一下什么是JWT,以及如何在Spring Boot项目中使用JWT(JSON Web Token). 1.关于JWT 1.1 什么是JWT 老生常谈的开头,我们要用这样一种工具 ...

  9. 八幅漫画理解使用 JSON Web Token 设计单点登录系统

    原文出处: John Wu 上次在<JSON Web Token – 在Web应用间安全地传递信息>中我提到了JSON Web Token可以用来设计单点登录系统.我尝试用八幅漫画先让大家 ...

随机推荐

  1. 学Java的第17天。呃。。。今天有点奇葩

    神奇的老师在网上看到狗跳楼的视频然后就想到抛物线问题: 还是 属性和方法的调用: package sklx; public class Dog{ private float v = 30.0f; pr ...

  2. 加快maven中jar包的下载速度,maven镜像收集

    maven下载jar包的默认仓库是http://my.repository.com/repo/path速度较慢,通过配置国内镜像提高下载速度 1.打开eclipse--->Window---&g ...

  3. vue项目sql图片动态路径引用问题

    最近遇到一个vue动态图片路径的引用问题?明明路径是正确的但是却渲染不出图片!先看我慢慢说来!! 1.当我们把图片的路径放置在data(){return:{}}中的数组中的时候,然后通过v-for循环 ...

  4. js之搜索框

    目标效果:点击搜索框,搜索框内提示信息消失,可输入搜索信息,点击搜索框外搜索框如果没提示信息或者为空时,显示搜索框提示信息,如果有搜索信息,显示搜索信息. 代码如下: <!DOCTYPE htm ...

  5. ES 5 中 判断数组的方法

    源代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  6. Python sys 模块

    import sys # 把命令行参数返回一个 List,第一个元素是程序本身的路径 print(sys.argv) # 命令行运行 python3 sys_model.py klvchen hell ...

  7. 【读书笔记】iOS-xib,自动布局(二)

    我们紧接着上面的文章来写. 一,此时没有选择自动布局的时候 . 二,选中Use Auto Layout.如下图所示. 三,自动布局与不自动布局最明显的区别是右下角多了4个按钮.如图所示. 四,设置On ...

  8. Android 裁剪人脸

    人脸裁剪类 public final class FaceCj { private static BitmapFactory.Options BitmapFactoryOptionsbfo; priv ...

  9. python装饰器(新年第一写)

    祭奠碌碌无为的2018,想想其实也不算碌碌无为,至少我还搞懂了装饰器,写了一堆有用没用的玩意 原来觉得装饰器挺难的,直到2018年的最后几天,突然就明白了,难道这就是传说中的开天聪么 言归正传,之所以 ...

  10. mysql启动失败又一例

    搭的wordpress报错: 后台用的mysql,之前也崩过,原因是虚拟内存耗尽,通过增加swap空间最终让数据重新启动. 但仅过一晚上,数据库再次崩溃.看来要查一查是什么程序耗尽资源. 执行top, ...