Flask API认证 #
一、Token认证 #
1.1 生成Token #
python
import secrets
def generate_token():
return secrets.token_hex(32)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80))
token = db.Column(db.String(64), unique=True)
1.2 认证装饰器 #
python
from functools import wraps
from flask import request, jsonify
def token_required(f):
@wraps(f)
def decorated(*args, **kwargs):
token = request.headers.get('Authorization')
if not token:
return jsonify({'error': '缺少Token'}), 401
user = User.query.filter_by(token=token).first()
if not user:
return jsonify({'error': '无效Token'}), 401
return f(user, *args, **kwargs)
return decorated
二、JWT认证 #
2.1 安装 #
bash
pip install pyjwt
2.2 使用JWT #
python
import jwt
from datetime import datetime, timedelta
app.config['SECRET_KEY'] = 'your-secret-key'
def create_token(user_id):
payload = {
'user_id': user_id,
'exp': datetime.utcnow() + timedelta(hours=1)
}
return jwt.encode(payload, app.config['SECRET_KEY'], algorithm='HS256')
def verify_token(token):
try:
payload = jwt.decode(token, app.config['SECRET_KEY'], algorithms=['HS256'])
return payload['user_id']
except jwt.ExpiredSignatureError:
return None
except jwt.InvalidTokenError:
return None
三、下一步 #
接下来让我们学习 API文档,了解API文档生成!
最后更新:2026-03-28