flask实现token验证
from flask import Flask
from flask.globals import request
from flask.json import jsonify
from itsdangerous import TimedJSONWebSignatureSerializer as Serializerapp=Flask(__name__)
#私钥
app.config['SECRET_KEY']='LIUBINGZHEISBEST'
#忽略的检查的url
NOT_CHECK_URL=['/login']
#生产token
def create_token(api_user):'''生成token:param api_user:用户id:return: token'''#第一个参数是内部的私钥,这里写在共用的配置信息里了,如果只是测试可以写死#第二个参数是有效期(秒)s = Serializer(app.config["SECRET_KEY"],expires_in=3600)#接收用户id转换与编码token = s.dumps({"id":api_user}).decode("ascii")return token
'''
装饰器模式
def login_required(view_func):@functools.wraps(view_func)def verify_token(*args,**kwargs):try:#在请求头上拿到tokentoken = request.headers["z-token"]except Exception:#没接收的到token,给前端抛出错误#这里的code推荐写一个文件统一管理。这里为了看着直观就先写死了。return jsonify(msg = 'token为空')#解密s = Serializer(app.config["SECRET_KEY"])try:s.loads(token)except Exception:return jsonify(msg = "token已经过期")return view_func(*args,**kwargs)return verify_token
'''
@app.before_request
def login_required():if request.path not in NOT_CHECK_URL:try:token = request.headers["token"]except:return jsonify(msg='给我token啊')s = Serializer(app.config["SECRET_KEY"])try:s.loads(token)except:return jsonify(msg = "你的token我怎么算不出来??")
@app.route('/login',methods=["POST"])
def info():'''POST携带userid来换取token代码省略其他逻辑'''return jsonify({'token':create_token(api_user=request.args.getlist('user_id'))})@app.route('/msg')
def index():'''携带token登陆'''return jsonify(msg='这是队友,进来吧')
if __name__ == "__main__":app.run(debug=1)
获取token
验证
错误
itsdangerous库:https://itsdangerous.palletsprojects.com/en/1.1.x/
其他文章:https://juejin.cn/post/6844903929289932808
NOT_CHECK_URL=['/login']
@app.before_request
def is_login():if request.path not in NOT_CHECK_URL:loginkey=request.args.getlist('key')if loginkey[0]=='allow_code':#连接数据库,如果当前登录态没有过期则什么都不做,否则拦截passelse:return jsonify({'msg':'Invalid login status'})else:pass
@app.before_request
def auth_check():if request.path not in NOT_CHECK_URL:Authorization=request.headers.get('Authorization')if Authorization =='allow_code':#连接数据库,如果当前登录态没有过期则什么都不做,否则拦截return jsonify({'msg':'登陆成功'})else:return jsonify({'msg':'无效状态'})else:pass
before_request
在每一次请求前拦截,对request携带的信息读取判断加工
flask实现token验证相关推荐
- FLASK RESTFUL TOKEN用户验证笔记
笔记1 REST要求无状态,可以理解为没有session,而且session的存储遇到分布式集群的情况就比较难搞,所以对于用户验证目前网上大多数做法是token方式,第一次登录的时候,先提交用户名密码 ...
- 干货!flask登录注册token验证接口开发详解
今天给大家献上登录注册接口开发,是基于token验证的.咱们闲言少叙,进入正题! 首先看一下数据库模型: #pip install passlib from passlib.apps import c ...
- vue中axios如何实现token验证
title: vue中axios如何实现token验证 date: 2018-02-08 17:50:07 tags: [axios,vue] 继上篇实现Auth认证之后,然后每个跳转页面都会在后端验 ...
- signature验证/salt验证/token验证的作用
1.salt验证: salt是随机生成的一串字符,salt验证的作用是将生成的salt与加密的密码密文拼接后再次加密存储 这样可以是存储在数据库中的密码更加安全 2.signature验证: I.将 ...
- 如何利用 C# 爬取带 Token 验证的网站数据?
在对文本数据的情感分析中,基于情感词典的方法是最简单也是最常用的一种了. 它的大体思路如下: 对文档分词,找出文档中的情感词.否定词以及程度副词,然后判断每个情感词之前是否有否定词及程度副词,将它之前 ...
- Django restframework之Token验证的缺陷及jwt的简单使用
一.主要缺陷: 1.Token验证是放在一张表中,即authtoken_token中,key没有失效时间,永久有效,一旦泄露,后果不可想象,安全性极差. 2.不利于分布式部署或多个系统使用一套验证,a ...
- java微信公众号开发token验证失败的问题及解决办法
java微信公众号开发token验证失败的问题及解决办法 参考文章: (1)java微信公众号开发token验证失败的问题及解决办法 (2)https://www.cnblogs.com/beardu ...
- 微信token验证失败的解决方法
微信token验证失败的解决方法 参考文章: (1)微信token验证失败的解决方法 (2)https://www.cnblogs.com/kenshinobiy/p/5433705.html 备忘一 ...
- 手动生成token_手动设计简单的Token验证
简述一下项目中手写的Token验证服务设计过程 PART A 设计校验的哈希算法 这里直接展示整个项目中用到的算法库,其中涉及位运算的可不管 直接应用到的方法是hash(str) 大概流程如下 1.构 ...
最新文章
- 9文一览:近期必读微生物组生信论文
- [转载]C#模拟键盘鼠标事件-SendKeys
- linux的同步与互斥
- [推荐算法]ItemCF,基于物品的协同过滤算法
- 放弃Python转向Go语言:我们找到了以下9大理由
- jq之$(“[href]“)
- 工作那些事(三十一)怎样带好一个项目团队
- 《WinForm开发系列之控件篇》Item31 MenuStrip(暂无)
- DataSet和实体类的相互转换
- 阿里云原生资深专家李国强:云原生上云概述
- Linux nohup 关闭终端的时候,程序依然能在后台运行( linux重定向及nohup不输出的方法)...
- VMware虚拟机和Linux的安装及镜像下载
- 为软考准备的论文!!
- UE4(虚幻4)基础:免费资源下载(材质/动作/模型/环境/效果/插件)
- SSM_config配置springmvc.xml模板
- 计算机设备显示黄色感叹号,电脑没声音,设备管理器中声音出现黄色感叹号怎么办?...
- uni-app 的 tabBar 图标自制方法
- win7计算机高级设置在哪,windows7投屏设置在哪里
- 移动端小场景优化方案
- 你所不了解的DevOps