flask token 登录验证
视频
https://www.youtube.com/watch?v=J5bIPtEbS0Q
代码
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
@Introduce : flask token 实例
@File : jwt_token.py
@Time : 2020-12-22 17:40
@Author : xia hua dong
@Tel : 173 179 76823
@Email : 17317976823@163.com
@pip : pip install PyJWT==1.7.1
pip install flask
"""
# flask不兼容pyjwt2.0.0,所以要安装pyjwt1.7.1
from flask import Flask, jsonify, request, make_response # 导入flask
import jwt
import datetime
from functools import wraps # 编写装饰器
app = Flask(__name__) # 创建app
app.config['SECRET_KEY'] = 'thisisthesecretkey' # 设置密钥
def token_required(f): # token验证函数
@wraps(f)
def decorated(*args, **kwargs): # 写装饰器
token = request.args.get('token') # 127.0.0.1:5000/protected?token=eyJ0eXAiO...
if not token:
return jsonify({'message': '没有token'}), 403
try:
data = jwt.decode(token, app.config['SECRET_KEY'])
print('data:', data)
except:
return jsonify({'message': 'token错误或过期'}), 403
return f(*args, **kwargs)
return decorated
@app.route('/unprotected') # 不受保护的路径
def unprotected(): # 不受保护的函数
return jsonify({'message': '任何人都可以查看'})
@app.route('/protected') # 受保护的路径
@token_required # 使用token验证装饰器
def protected(): # 受保护的函数
return jsonify({'message': 'token验证成功'})
@app.route('/login', methods=['POST']) # 登录的路径
def login():
user = request.form.get('user') # 表单请求(可以用postmen模仿)
# print(datetime.datetime.utcnow() + datetime.timedelta(minutes=30))
if user == 'user': # 如果有报头,并且user是user
token = jwt.encode({ # token编码
'user': user, # 设置用户名
'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30) # 设置过期时间为30分钟
},
app.config['SECRET_KEY'] # 设置密钥
)
return jsonify({'token': token.decode('UTF-8')}) # 返回token
return '没有通过验证!'
if __name__ == '__main__':
app.run(debug=True) # 运行flask