Flask-JWT扩展的使用(二)

2023-05-06 16:19:34 浏览数 (1)

身份识别

要实现身份识别功能,我们需要提供一个identity函数来获取用户对象。在本文中,我们将使用用户ID来获取用户对象。在auth.py模块中,我们可以定义一个名为identity的函数:

代码语言:javascript复制
from models import User

def identity(payload):
    user_id = payload['identity']
    return User.query.get(user_id)

在这个例子中,我们首先从JWT载荷中获取用户ID,然后使用用户ID从数据库中获取用户对象。

保护API

现在,我们已经实现了基本的身份验证和身份识别功能,下一步是保护我们的API。在本文中,我们将使用Flask-JWT提供的jwt_required装饰器来保护API。在api.py模块中,我们可以定义一个需要身份验证才能访问的API:

代码语言:javascript复制
from flask import jsonify
from flask_jwt import jwt_required, current_identity

@app.route('/api/me')
@jwt_required()
def me():
    return jsonify({'user_id': current_identity.id, 'username': current_identity.username})

在这个例子中,我们使用jwt_required装饰器将me()视图函数标记为需要身份验证才能访问的API。如果用户没有提供有效的JWT令牌,Flask-JWT将返回一个HTTP 401 Unauthorized错误。如果用户提供了有效的JWT令牌,当前用户的身份将通过current_identity全局变量进行访问。

JWT选项

Flask-JWT扩展还提供了一些选项,用于控制JWT的生成和解码行为。以下是一些常见选项:

  • JWT_EXPIRATION_DELTA: JWT的过期时间。默认为一小时。
  • JWT_AUTH_HEADER_PREFIX: JWT令牌的前缀。默认为'JWT'。
  • JWT_ALGORITHM: JWT的加密算法。默认为HS256。
  • JWT_SECRET_KEY: JWT的密钥。默认为Flask应用程序的SECRET_KEY选项。

要设置这些选项,您可以在Flask应用程序实例上设置相应的配置选项:

代码语言:javascript复制
app.config['JWT_EXPIRATION_DELTA'] = timedelta(seconds=300)
app.config['JWT_AUTH_HEADER_PREFIX'] = 'Bearer'
app.config['JWT_ALGORITHM'] = 'HS512'

0 人点赞