小明:嘿,小李,我最近在开发一个系统,需要实现用户登录后才能下载文件,怎么处理呢?
小李:你得先做统一身份认证。用户登录后,系统会生成一个token或者session,用来标识用户身份。
小明:那怎么和下载功能结合起来呢?
小李:你可以设计一个下载接口,这个接口需要验证用户的登录状态。比如用JWT(JSON Web Token)来传递用户信息。
小明:能给我个代码示例吗?
小李:当然可以。下面是一个简单的Python Flask示例:
from flask import Flask, request, jsonify
import jwt
import datetime
app = Flask(__name__)
SECRET_KEY = 'your-secret-key'
@app.route('/login', methods=['POST'])
def login():
username = request.json.get('username')
password = request.json.get('password')
# 假设这里验证用户名和密码是否正确
if username == 'admin' and password == '123456':
payload = {
'user': username,
'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
return jsonify({'token': token})
else:
return jsonify({'error': 'Invalid credentials'}), 401
@app.route('/download', methods=['GET'])
def download():
token = request.headers.get('Authorization')
if not token:
return jsonify({'error': 'Missing token'}), 401
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
user = payload['user']
return f"Downloaded by {user}"
except jwt.ExpiredSignatureError:
return jsonify({'error': 'Token expired'}), 401
except jwt.InvalidTokenError:
return jsonify({'error': 'Invalid token'}), 401

if __name__ == '__main__':
app.run(debug=True)
小明:明白了!这样用户登录后获取token,再用token访问下载接口,就能实现权限控制了。
小李:没错,这就是统一身份认证和下载功能结合的基本思路。你可以根据实际需求扩展更多安全机制。
