Alice: 嗨,Bob,我正在构建一个网站,需要一个统一的身份认证系统,同时还需要支持用户下载文件的功能。你能帮我吗?
Bob: 当然可以!我们可以使用JWT(JSON Web Tokens)来进行身份认证。首先,我们需要创建一个认证接口。
from flask import Flask, request, jsonify
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
app = Flask(__name__)
SECRET_KEY = 'your_secret_key'
def generate_token(user_id):
s = Serializer(SECRET_KEY, expires_in=3600)
return s.dumps({'id': user_id}).decode('utf-8')
@app.route('/login', methods=['POST'])
def login():
username = request.json.get('username')
password = request.json.get('password')
# 这里假设我们已经有一个用户数据库和密码验证逻辑
if authenticate(username, password):
token = generate_token(1) # 用户ID为1
return jsonify({'token': token})
else:
return jsonify({'error': 'Invalid credentials'}), 401
def authenticate(username, password):
# 模拟用户认证逻辑
return username == "test" and password == "test"
]]>
Bob: 然后,我们需要确保只有经过认证的用户才能下载文件。
@app.route('/download/
def download_file(filename):
auth_header = request.headers.get('Authorization')
if not auth_header or not verify_token(auth_header.split(' ')[1]):
return jsonify({'error': 'Unauthorized'}), 401
file_path = f'./files/{filename}'
return send_file(file_path, as_attachment=True)
def verify_token(token):
s = Serializer(SECRET_KEY)
try:
data = s.loads(token)
except:
return False
return True
]]>
Alice: 太棒了,我们现在有了一个基本的框架。接下来,我们需要处理文件存储和权限控制。