Files
live-hub-py/web/backend/services/user_profile_service.py
T
yml2213 2f5a63ae27 feat(auth): 新增手机号与 DCAuth 设备认证登录
- 登录链路改为用户名 + 密码 + 短信验证码 + DCAuth v2 设备签名
- 新增 login_sms_codes / user_devices / device_challenges 三张表,迁移 0063/0064
- 设备绑定只比对 deviceId + publicKey,每账号一个 active 设备,管理员可重置
- 保留未绑定手机号账号的密码登录兜底,绑定后强制安全登录
- 登录页与用户管理页支持验证码、DCAuth 轮询、手机号绑定与设备重置
2026-10-21 22:00:03 +08:00

31 lines
1.1 KiB
Python

"""用户信息序列化(列表 / 创建 / 编辑 / 管理端接口共用)。"""
from __future__ import annotations
from ..models import User, UserDevice
from ..permissions import get_user_permissions
from ..schemas import UserInfo
from .dc_auth_service import mask_device_id
from .login_sms_service import mask_phone
def to_user_info(user: User, device: UserDevice | None = None) -> UserInfo:
device_id = str(device.device_id or "") if device is not None else ""
return UserInfo(
id=user.id,
username=user.username,
role=user.role,
is_active=user.is_active,
remark=user.remark or "",
created_at=user.created_at,
permissions=get_user_permissions(user),
custom_permissions=user.custom_permissions,
phone=str(user.phone or ""),
phone_masked=mask_phone(user.phone),
phone_bound_at=user.phone_bound_at,
device_id=device_id,
device_id_masked=mask_device_id(device_id),
device_bound_at=device.bound_at if device is not None else None,
device_last_used_at=device.last_used_at if device is not None else None,
)