flask实现中台,同一用户体系接入多个系统,代码示例
时间: 2023-11-25 11:08:22 浏览: 114
首先,我们需要在 Flask 中实现用户认证和授权功能。可以选择使用 Flask-Login 和 Flask-Security 等已有的扩展库,也可以自行实现。
接下来,我们需要在多个系统中共用相同的用户体系。可以使用 JWT(JSON Web Token)实现跨系统的认证和授权,具体步骤如下:
1. 用户在系统 A 中登录,系统 A 后台生成一个 JWT,并返回给前端。
2. 前端在调用系统 B 的 API 时,将 JWT 作为参数或者 Header 信息传递给系统 B。
3. 系统 B 后台对 JWT 进行解析和验证,如果验证通过,则认为该用户已经登录,可以进行后续的操作。
下面是一个简单的代码示例,实现了基于 Flask-Login 和 JWT 的用户认证和授权功能:
```python
from flask import Flask, jsonify, request
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user
import jwt
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
login_manager = LoginManager(app)
# 定义用户模型
class User(UserMixin):
def __init__(self, id):
self.id = id
# 模拟数据库中的用户信息
users = {
'1': {'id': '1', 'username': 'user1', 'password': 'password1'},
'2': {'id': '2', 'username': 'user2', 'password': 'password2'}
}
# 实现用户认证功能
@login_manager.user_loader
def load_user(user_id):
return User(user_id)
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
for id, user in users.items():
if user['username'] == username and user['password'] == password:
login_user(User(id))
# 生成 JWT,并返回给前端
token = jwt.encode({'user_id': id}, app.config['SECRET_KEY'], algorithm='HS256')
return jsonify({'token': token})
return jsonify({'error': 'Invalid username or password'})
# 实现用户授权功能
@app.route('/api')
@login_required
def api():
# 验证 JWT,如果验证通过,则认为用户已经登录
token = request.headers.get('Authorization').split()[1]
try:
payload = jwt.decode(token, app.config['SECRET_KEY'], algorithms=['HS256'])
user_id = payload['user_id']
return jsonify({'message': f'Hello, user {user_id}!'})
except jwt.exceptions.InvalidTokenError:
return jsonify({'error': 'Invalid token'})
# 实现用户注销功能
@app.route('/logout')
@login_required
def logout():
logout_user()
return jsonify({'message': 'Logged out'})
if __name__ == '__main__':
app.run()
```
在多个系统中使用该用户体系时,只需要在每个系统中实现类似的 JWT 验证逻辑即可。
阅读全文