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的视图上即可。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/1008

相关推荐