feat(dcauth): 新增后台手机号与设备认证登录

登录链路改为账号密码 + 短信验证码 + DCAuth 设备签名,并新增后台手机号绑定、
登录日志、设备绑定与重置接口。
This commit is contained in:
yml2213
2026-10-21 20:46:24 +08:00
parent 7542d547bf
commit 040100f290
36 changed files with 3128 additions and 41 deletions
+72
View File
@@ -4,7 +4,10 @@ import {
createManagedAdminUser,
getAdminUserList,
resetManagedAdminUserPassword,
resetManagedAdminUserDevice,
updateManagedAdminUserDisplayName,
updateManagedAdminUserPhone,
updateManagedAdminUserTestAccount,
updateManagedAdminUserRole,
updateManagedAdminUserStatus,
} from '../../services/admin/admin-auth-service.js'
@@ -160,4 +163,73 @@ router.post(
),
)
router.post(
'/users/:userId/phone',
createJsonHandler(
(req) =>
updateManagedAdminUserPhone(
String(req.params.userId || ''),
req.body,
getRequiredAdminSession(req),
),
{
successMessage: '手机号已绑定',
errorMessage: '绑定手机号失败',
scope: '[admin/users/:userId/phone]',
audit: (_req, data) => {
const result = data as AdminUserMutationResult
return {
action: 'admin_user_phone_updated',
targetType: 'admin_user',
targetId: String(result.user.userId),
data: { username: result.user.username },
}
},
},
),
)
router.post(
'/users/:userId/device/reset',
createJsonHandler(
(req) =>
resetManagedAdminUserDevice(String(req.params.userId || ''), getRequiredAdminSession(req)),
{
successMessage: '设备绑定已重置',
errorMessage: '重置设备绑定失败',
scope: '[admin/users/:userId/device/reset]',
audit: (_req, data) => {
const result = data as AdminUserMutationResult
return {
action: 'admin_user_device_reset',
targetType: 'admin_user',
targetId: String(result.user.userId),
data: { username: result.user.username },
}
},
},
),
)
router.post(
'/users/:userId/test-account',
createJsonHandler(
(req) => updateManagedAdminUserTestAccount(String(req.params.userId || ''), req.body),
{
successMessage: '测试账号设置已更新',
errorMessage: '更新测试账号设置失败',
scope: '[admin/users/:userId/test-account]',
audit: (_req, data) => {
const result = data as AdminUserMutationResult
return {
action: 'admin_user_test_account_updated',
targetType: 'admin_user',
targetId: String(result.user.userId),
data: { username: result.user.username },
}
},
},
),
)
export default router