用户认证 API (Auth)
auth_bp 蓝图提供了系统的安全基础,通过非对称加密的思想生成访问令牌,确保后续计算任务请求的合法性。
🔐 安全机制概览
Section titled “🔐 安全机制概览”- 身份验证:使用
flask-jwt-extended生成短期访问令牌。 - 安全防护:登录接口采用模糊错误提示,防止用户名枚举攻击。
- 权限分发:响应中包含
is_admin字段,配合前端路由守卫实现权限分流。
📡 接口定义
Section titled “📡 接口定义”1. 注册接口
Section titled “1. 注册接口”将新用户信息持久化至 User 模型。
- URL:
/register - Method:
POST - Content-Type:
application/json
请求载荷 (Payload)
Section titled “请求载荷 (Payload)”| 字段名 | 类型 | 必填 | 约束/描述 |
|---|---|---|---|
username | string | 是 | 唯一标识,不能为空 |
password | string | 是 | 长度 ≥ 6 位 |
email | string | 是 | 标准邮箱格式,需唯一 |
real_name | string | 否 | 用户真实姓名 |
school | string | 否 | 所属学术机构/学校 |
201: 注册成功。400: 参数缺失、邮箱格式错误、密码过短或用户名/邮箱已存在。500: 数据库事务回滚或系统内部错误。
2. 登录接口
Section titled “2. 登录接口”验证凭据并分发 JWT 令牌。
- URL:
/login - Method:
POST
成功响应 (200 OK)
Section titled “成功响应 (200 OK)”{ "status": "success", "access_token": "eyJhbGciOiJIUzI1Ni...", "user": { "id": 1, "username": "lab_admin", "real_name": "张三", "is_admin": true }}安全逻辑实现
Section titled “安全逻辑实现”# 核心安全逻辑:模糊化错误反馈if user and user.check_password(password): # 验证成功逻辑 passelse: # 统一返回 401,不暴露具体是账号不存在还是密码错误 return jsonify({"msg": "用户名或密码错误"}), 4013. Token 检查
Section titled “3. Token 检查”验证当前存储在 Header 中的令牌是否过期或失效。
- URL:
/check_token - Method:
GET - Authorization:
Bearer <access_token>
- 装饰器
@jwt_required()会自动拦截未携带有效 Token 的请求。 - 主要用于前端页面跳转时的“静默登录”校验。
🛠 开发技术细节
Section titled “🛠 开发技术细节”1. 数据完整性与校验
Section titled “1. 数据完整性与校验”接口在 Service 层之前执行了原子级校验:
- 正则过滤:通过
re.match强制执行邮箱格式检查。 - 幂等性:在
commit前执行filter_by查询,防止数据库并发导致的重复键错误。
2. 异常处理机制
Section titled “2. 异常处理机制”try: # 数据库敏感操作 db.session.commit()except Exception as e: # 发生异常立即回滚,防止脏数据入库 db.session.rollback() current_app.logger.error(f"Error: {str(e)}")