flask_jwt_extended 普通用户跟管理员token用户进行区分 写一个例子给我
时间: 2023-05-14 21:05:54 浏览: 252
好的,以下是一个使用 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,从而判断用户是否为管理员。
阅读全文