flask使用flask_jwt_extended进行用户登录验证

发布时间 2023-08-22 16:06:04作者: 朝朝暮Mu
from datetime import timedelta
from flask import Flask, jsonify, request
from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity

app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'your-secret-key'  # 设置密钥

# Set the token expiration time
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = timedelta(hours=2)

jwt = JWTManager(app)

# 假设您的用户信息存储在数据库中
users = [
    {"username": "admin", "password": "admin"},
    {"username": "user", "password": "pass"}
]


# 用户登录路由
@app.route('/login', methods=['POST'])
def login():
    username = request.json.get('username')
    password = request.json.get('password')

    # 验证用户名和密码是否匹配
    for user in users:
        if user["username"] == username and user["password"] == password:
            # 创建访问令牌
            access_token = create_access_token(identity=username)
            return jsonify(access_token=access_token), 200

    return jsonify({"msg": "Invalid username or password"}), 401


@jwt.expired_token_loader
def my_expired_token_callback(a,b):
    return jsonify({
        'code': 401,
        'message': 'token已过期'
    })


# 受保护的路由,需要访问令牌进行身份验证
@app.route('/protected', methods=['GET'])
@jwt_required()
def protected():
    # 获取当前用户
    current_user = get_jwt_identity()
    print(current_user)
    return jsonify(logged_in_as=current_user), 200

参考:https://blog.csdn.net/djstavaV/article/details/112261875