51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
|
|
"""qrcode login (Phase 1.1)
|
||
|
|
|
||
|
|
Revision ID: 022_qrcode_login
|
||
|
|
Revises: 021_rbac
|
||
|
|
Create Date: 2026-06-21
|
||
|
|
|
||
|
|
Phase 1.1 扫码登录后端接口(task #14)。
|
||
|
|
|
||
|
|
设计说明:
|
||
|
|
扫码登录的所有状态都存在 Redis(无需新增数据库表):
|
||
|
|
- qrcode:ticket:{ticket} → {created_at, expires_at}, TTL 120s
|
||
|
|
- qrcode:scan:{ticket} → {employee_id, name, scanned_at}, TTL 120s
|
||
|
|
- qrcode:confirm:{ticket} → {token, confirmed_at, roles}, TTL 60s
|
||
|
|
|
||
|
|
不动 User / Agent 模型(MFA 字段留给 Phase 2.1)。
|
||
|
|
不动 auth2fa.py(SMS 备用通道保留)。
|
||
|
|
|
||
|
|
为什么仍然生成这个 migration 文件:
|
||
|
|
1. alembic 版本链不能断,021 → 022 必须存在(后续 023+ 需要接续)
|
||
|
|
2. 标记 Phase 1.1 上线,方便运维追溯和回滚标记
|
||
|
|
3. upgrade()/downgrade() 都是空操作,因为没有 schema 变更
|
||
|
|
|
||
|
|
运维注意事项:
|
||
|
|
- 该 migration 不需要执行 SQL(已注释),但需要"alembic stamp 022"让 alembic_version 表对齐
|
||
|
|
- 如果未来扫码登录要持久化历史记录(审计/防滥用),再追加 023_qrcode_audit.py 加 qrcode_login_logs 表
|
||
|
|
"""
|
||
|
|
from alembic import op
|
||
|
|
import sqlalchemy as sa
|
||
|
|
|
||
|
|
|
||
|
|
# revision identifiers, used by Alembic.
|
||
|
|
revision = "022_qrcode_login"
|
||
|
|
down_revision = "021_rbac"
|
||
|
|
branch_labels = None
|
||
|
|
depends_on = None
|
||
|
|
|
||
|
|
|
||
|
|
def upgrade() -> None:
|
||
|
|
"""Phase 1.1 扫码登录无 schema 变更,upgrade 留空。
|
||
|
|
|
||
|
|
预留说明: 如果部署时 alembic stamp 未执行,导致 backend 启动报
|
||
|
|
"alembic_version" mismatch,只需 `alembic stamp 022` 即可对齐。
|
||
|
|
"""
|
||
|
|
# 故意 pass:扫码登录的所有数据存 Redis,无 DB schema 变更
|
||
|
|
pass
|
||
|
|
|
||
|
|
|
||
|
|
def downgrade() -> None:
|
||
|
|
"""Phase 1.1 扫码登录无 schema 变更,downgrade 留空。"""
|
||
|
|
# 故意 pass
|
||
|
|
pass
|