基于flask框架,里面包含token验证,用户登录,权限管理功能的python代码
时间: 2023-10-10 14:12:54 浏览: 99
以下是一个基于 Flask 框架的 Python 代码模板,包含了 Token 验证、用户登录和权限管理功能:
```python
from flask import Flask, jsonify, request, g
import jwt
from functools import wraps
app = Flask(__name__)
# 配置密钥
app.config['SECRET_KEY'] = 'your_secret_key_here'
# 用户数据
users = [
{'id': 1, 'username': 'user1', 'password': 'password1', 'role': 'admin'},
{'id': 2, 'username': 'user2', 'password': 'password2', 'role': 'user'},
]
# Token 验证装饰器
def token_required(f):
@wraps(f)
def decorated(*args, **kwargs):
token = request.headers.get('Authorization')
if not token:
return jsonify({'message': 'Token is missing!'}), 401
try:
data = jwt.decode(token, app.config['SECRET_KEY'])
g.current_user = [user for user in users if user['id'] == data['id']][0]
except:
return jsonify({'message': 'Token is invalid!'}), 401
return f(*args, **kwargs)
return decorated
# 用户登录路由
@app.route('/login', methods=['POST'])
def login():
auth = request.authorization
if not auth or not auth.username or not auth.password:
return jsonify({'message': 'Could not verify login information!'}), 401
user = [user for user in users if user['username'] == auth.username and user['password'] == auth.password]
if not user:
return jsonify({'message': 'Could not verify login information!'}), 401
token = jwt.encode({'id': user[0]['id']}, app.config['SECRET_KEY'])
return jsonify({'token': token.decode('UTF-8')})
# 需要管理员权限的路由
@app.route('/admin', methods=['GET'])
@token_required
def admin_only():
if g.current_user['role'] != 'admin':
return jsonify({'message': 'Admin permission required!'}), 401
return jsonify({'message': 'Welcome, admin!'})
# 需要用户权限的路由
@app.route('/user', methods=['GET'])
@token_required
def user_only():
if g.current_user['role'] != 'user':
return jsonify({'message': 'User permission required!'}), 401
return jsonify({'message': 'Welcome, user!'})
if __name__ == '__main__':
app.run(debug=True)
```
以上代码实现了 Token 验证、用户登录和权限管理功能。其中:
- `token_required` 装饰器用于需要 Token 验证的路由,确保只有带有有效 Token 的请求才能通过。
- `login` 路由用于用户登录,验证用户信息并返回 Token。
- `/admin` 和 `/user` 路由分别需要管理员和普通用户权限,通过 `g.current_user` 获取当前用户信息,判断用户角色是否具有访问权限。
阅读全文