flask_jwt_extended 普通用户跟管理员用户进行区分
时间: 2023-05-14 09:05:54 浏览: 444
flask_jwt_extended 可以通过设置不同的用户角色来区分普通用户和管理员用户。可以在创建 token 时添加用户角色信息,然后在需要进行权限验证的地方进行判断。具体实现可以参考 flask_jwt_extended 的官方文档。
相关问题
flask_jwt_extended 普通用户跟管理员token用户进行区分 写一个例子给我
好的,以下是一个使用 flask_jwt_extended 区分普通用户和管理员用户的例子:
```python
from flask import Flask, jsonify
from flask_jwt_extended import JWTManager, jwt_required, get_jwt_identity, get_raw_jwt
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret' # 设置 JWT 密钥
jwt = JWTManager(app)
# 模拟用户数据
users = [
{'id': 1, 'username': 'user1', 'password': 'password1', 'is_admin': False},
{'id': 2, 'username': 'user2', 'password': 'password2', 'is_admin': True}
]
# 登录接口
@app.route('/login', methods=['POST'])
def login():
username = request.json.get('username', None)
password = request.json.get('password', None)
if not username or not password:
return jsonify({'msg': 'Missing username or password'}), 400
user = next((u for u in users if u['username'] == username and u['password'] == password), None)
if not user:
return jsonify({'msg': 'Invalid username or password'}), 401
# 生成 JWT token
access_token = create_access_token(identity=user['id'], user_claims={'is_admin': user['is_admin']})
return jsonify({'access_token': access_token}), 200
# 普通用户接口
@app.route('/user', methods=['GET'])
@jwt_required
def user():
user_id = get_jwt_identity()
return jsonify({'msg': f'Hello user {user_id}!'}), 200
# 管理员用户接口
@app.route('/admin', methods=['GET'])
@jwt_required
def admin():
user_id = get_jwt_identity()
if not get_raw_jwt()['is_admin']:
return jsonify({'msg': 'You are not authorized to access this resource'}), 403
return jsonify({'msg': f'Hello admin {user_id}!'}), 200
```
在这个例子中,我们使用了 flask_jwt_extended 扩展来生成 JWT token,并在登录时将用户的 is_admin 属性作为 user_claims 传递给了 create_access_token() 函数。在普通用户接口和管理员用户接口中,我们使用了 @jwt_required 装饰器来保护接口,同时使用 get_jwt_identity() 函数获取用户的 id,使用 get_raw_jwt() 函数获取用户的 user_claims,从而判断用户是否为管理员。
flask_jwt_extended
flask_jwt_extended是一个基于Flask的JWT扩展,它提供了更多的功能和选项,使得使用JWT更加方便和灵活。它支持JWT的生成、解析和验证,还支持黑名单、刷新令牌、自定义载荷等功能。使用flask_jwt_extended可以帮助开发者更加高效地实现JWT认证和授权功能。
阅读全文