flask中使用PyJWT生成token的方法以及请求验证
- 2025-03-27 13:06:00
- 开发
- 102
- shevechco
在前后端分离的场景中,我们经常使用到token,那么我们今天就来记录下如何生成和验证token
首先是生成token,我们使用得到了jwt库,需要安装
pip install PyJWT
接着我们我们就需要生成token,代码如下:
from flask import current_app
import jwt
#生成token
def generate_token(user_id, account):
exp = 3600
payload = {
'id': user_id,
'account': account,
'exp': datetime.now() + timedelta(seconds=exp)
}
token = jwt.encode(payload=payload, key=current_app.secret_key, algorithm='HS256')
return token
验证的主要代码如下:
from flask import current_app
import jwt
#验证token
def verify_token(token):
data = dict()
try:
data = jwt.decode(token, key=current_app.secret_key, algorithms=['HS256'])
except Exception as e:
current_app.logger.error("Token 验证失败, {}".format(e))
return data
在flask中,我们可以利用钩子函数,在前置方法中进行token的验证,避免在每个接口去验证token,方法如下:
from flask import g
from common import verify_token
@app.context_processor
def request_verify_token():
data = request.headers.get('token')
if 'id' in verify_token(data):
g.user_id = data['id']
这样就可以在每个视图函数中使用g.user_id获取到用户的id了,除了上述方法我们还可以使用装饰器的方法进行token的验证。
#检测token是否有效
def check_token(func):
@wraps(func)
def wrapper(*args, **kwargs):
token = request.headers.get('token')
data = verify_token(token)
if 'id' not in data:
return jsonify({
"code": 1,
"msg": "Token失效,请检查!"
})
else:
g.id = data.get("id")
return func(*args, **kwargs)
return wrapper
然后将装饰器@check_token装饰到每个需要验证token的视图上即可。
内容版权声明:除非注明,否则皆为本站原创文章。