统一身份认证系统




张工:小李,最近我们公司打算上线一个支持在线试用的统一身份认证平台,你觉得这个项目怎么样?
李工:我觉得挺有前景的。现在越来越多的企业需要这样的服务,尤其是那些希望用户快速体验其在线产品的公司。
张工:那我们就从最基本的用户注册和登录开始吧。首先得有一个API接口让用户可以在线注册。
李工:好的,我先写一个简单的Python Flask框架来处理用户的注册请求。
from flask import Flask, request, jsonify
app = Flask(__name__)
# 模拟数据库存储用户信息
users_db = []
@app.route('/register', methods=['POST'])
def register():
data = request.get_json()
username = data['username']
password = data['password']
for user in users_db:
if user['username'] == username:
return jsonify({'message': 'Username already exists'}), 409
users_db.append({'username': username, 'password': password})
return jsonify({'message': 'User registered successfully'}), 201
if __name__ == '__main__':
app.run(debug=True)
]]>
张工:看起来不错,接下来是用户登录部分。用户应该能够输入用户名和密码来获取访问令牌。
李工:没问题,我们可以使用JWT(JSON Web Token)来生成访问令牌。
import jwt
SECRET_KEY = 'your_secret_key'
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()
username = data['username']
password = data['password']
for user in users_db:
if user['username'] == username and user['password'] == password:
token = jwt.encode({'username': username}, SECRET_KEY, algorithm='HS256')
return jsonify({'token': token}), 200
return jsonify({'message': 'Invalid credentials'}), 401
]]>
张工:很好!最后,我们需要确保新用户可以免费试用一段时间。你有什么想法吗?
李工:我们可以给每个账户设置一个默认的试用期,比如30天。当用户注册时,记录当前时间,并在后续的API调用中检查是否超过试用期。
import time
@app.route('/protected', methods=['GET'])
def protected():
token = request.headers.get('Authorization').split()[1]
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
username = payload['username']
user = next((u for u in users_db if u['username'] == username), None)
if not user:
return jsonify({'message': 'User not found'}), 404
registration_time = user.get('registration_time', time.time())
if time.time() - registration_time > 2592000: # 30 days in seconds
return jsonify({'message': 'Trial period expired'}), 403
return jsonify({'message': 'Access granted'}), 200
except Exception as e:
return jsonify({'message': str(e)}), 401
]]>
张工:非常棒!这样我们就有了一个完整的在线试用统一身份认证平台雏形。
]]>