认证与账户 API

本文归纳登录、验证码、用户信息、账号、地址、钱包、角色、菜单和权限相关接口。来源为 wt-adminwt-client Controller 和前端 admin/src/apiclient/apiops/api

使用场景

认证与账户接口支撑所有端的登录态和权限判断,是其他业务接口的前置条件:

场景 入口 说明
管理端登录 /api/v1/captcha/image/api/v1/login/api/v1/info/api/v1/routers 登录后拉取用户信息和动态路由
消费者微信登录 /api/v1/login/wechat/api/v1/login/wechat/phone/bind 未绑定手机号时必须先完成绑定
用户资料维护 /api/v1/system/user/profile 管理端和小程序复用当前用户资料接口
账户关系查询 /api/v1/account/user 判断当前用户关联的个人、商户、员工等账户
地址管理 /api/v1/user/personal/address 消费者下单前必须有可用收货地址
权限配置 /api/v1/system/user/api/v1/system/role/api/v1/system/menu/api/v1/system/permission 管理端用户、角色、菜单和权限闭环

登录调用顺序

管理端和运营小程序账号密码登录:

  1. 调用 GET /api/v1/captcha/image 获取验证码图片和 uuid
  2. 调用 POST /api/v1/login,提交用户名、密码、验证码和 uuid
  3. 保存返回的 token
  4. 调用 GET /api/v1/info 获取用户、角色和权限。
  5. 调用 GET /api/v1/routers 获取菜单路由。

消费者微信登录:

  1. 小程序调用 wx.login 获取微信临时 code
  2. 调用 POST /api/v1/login/wechat
  3. 如果返回 phoneBound = true,保存登录态并进入业务页面。
  4. 如果返回 needBindPhone = true,只在当前页面临时保存登录结果。
  5. 用户授权手机号后,调用 POST /api/v1/login/wechat/phone/bind
  6. 绑定成功后再写入本地 tokenuserIdpersonalAccountId

后端认证逻辑

登录和权限链路由 wt-framework 安全配置、wt-system 用户权限模型和 wt-user 账户关系共同支撑。

环节 后端处理
验证码 生成验证码图片和 uuid,登录时按 uuid 校验验证码是否正确和过期
账号密码登录 校验用户存在、密码、状态、黑名单和登录限制,成功后签发 JWT
当前用户信息 根据 Token 解析用户,查询角色、权限和账户关系
菜单路由 根据角色和菜单状态组装路由树,前端按路由动态挂载页面
微信登录 用微信 code 换取 openid,匹配或创建用户,未绑定手机号时返回绑定提示
手机号绑定 解密或换取手机号后绑定用户,补齐个人账户和登录态

鉴权失败排查顺序:

  1. 请求头是否带 Authorization: Bearer <token>
  2. Token 是否过期或被强退。
  3. 用户状态是否启用。
  4. 角色是否绑定菜单。
  5. 菜单或权限标识是否与接口 @PreAuthorize 一致。
  6. 前端代理是否把请求发到了正确的 adminclient 入口。

关键字段

字段 说明
token 后续接口鉴权 Token,前端放入 Authorization: Bearer <token>
userId 系统用户 ID
personalAccountId 消费者个人账户 ID,订单、地址、钱包等个人业务依赖该字段
merchantAccountId 商户账户 ID,商户店铺、库存、发货和结算依赖该字段
employeeAccountId 员工账户 ID,仓库和配送员任务依赖该字段
permissions 当前用户权限标识集合,前端用于按钮和页面能力控制
roles 当前用户角色集合
languageId 用户语言配置,小程序登录会按语言传递

账户关系

一个系统用户可以关联多个业务账户,不同端进入业务时取用的账户 ID 不同。

账户 主要用途 常见业务
个人账户 消费者身份 地址、购物车、订单、评价、卡券钱包、个人钱包
商户账户 商户经营身份 店铺、库存、商户营销、发货、结算、提现
员工账户 员工作业身份 仓库管理员、配送员、商户员工、平台员工
企业账户 企业客户身份 企业资料、企业交易场景
政府账户 政府客户身份 政府资料和特定采购场景

业务接口不要只依赖 userId 判断数据范围。消费者订单应使用 personalAccountId,商户经营应使用 merchantAccountId,配送员任务应使用 employeeAccountId

端别 接口名称 方法 路径 权限标识 主要用途 主要调用端 后端 Controller
shared 图形验证码 GET /api/v1/captcha/image 登录验证码 adminclientops CaptchaController
shared 账号密码登录 POST /api/v1/login 用户登录并获取 Token adminclientops SysLoginController
shared 当前用户信息 GET /api/v1/info 登录态 获取用户、角色、权限 adminclientops SysLoginController
shared 当前用户路由 GET /api/v1/routers 登录态 获取菜单路由 adminclientops SysLoginController
client 微信小程序登录 POST /api/v1/login/wechat 微信登录或自动注册 client WxMiniProgramLoginController
client 微信手机号绑定 POST /api/v1/login/wechat/phone/bind 登录态 绑定微信手机号 client WxMiniProgramLoginController
client 用户注册 POST /api/v1/register 个人账户注册 client SysRegisterController
shared 当前用户资料 GETPUT /api/v1/system/user/profile 登录态 查看和修改个人资料 adminclient SysProfileController
shared 修改密码 PUT /api/v1/system/user/profile/pwd 登录态 修改当前用户密码 adminclient SysProfileController
shared 修改头像 POST /api/v1/system/user/profile/avatar 登录态 绑定头像文件 client SysProfileController
shared 上传头像 POST /api/v1/system/user/profile/avatar/upload 登录态 后端直传头像 client SysProfileController
admin 系统用户 GET /pageGET /{userId}POSTPUTDELETE /api/v1/system/user admin:system:user:* 后台用户管理 admin SysUserController
admin 角色管理 GET /pageGET /{roleId}POSTPUTDELETE /api/v1/system/role admin:system:role:* 角色和授权 admin SysRoleController
admin 菜单管理 GET /listGET /pageGET /tree/selectPOSTPUTDELETE /api/v1/system/menu admin:system:menu:* 菜单和路由配置 admin SysMenuController
admin 权限管理 GET /listGET /pageGET /user/{userId}GET /role/{roleId}POSTPUTDELETE /api/v1/system/permission admin:system:permission:* 权限标识维护 admin SysPermissionController
client 客户端角色查询 GET /pageGET /{roleId}GET /admin/{roleId} /api/v1/system/role client:system:role:* 客户端角色查询 clientops SysRoleController
client 客户端菜单查询 GET /listGET /pageGET /tree/selectGET /tree/{roleId} /api/v1/system/menu client:system:menu:* 客户端菜单查询 clientops SysMenuController
admin 账户总览 GETGET /personal/accountGET /merchant/accountGET /employee/account /api/v1/account/user admin:user:account:* 查询用户关联账户 admin UserAccountController
client 账户总览 GETGET /personal/accountGET /merchant/accountGET /employee/account /api/v1/account/user client:user:account:* 查询当前用户账户关系 clientops UserAccountController
admin 个人账户 GET /pageGET /{id}POSTPUTDELETE /api/v1/user/personal/account admin:user:personal:account:* 个人账户管理 admin PersonalAccountController
client 个人账户 GETGET /walletGET /wallet/balancePUT /api/v1/user/personal/account client:user:personal:account:* 当前个人账户资料 client PersonalAccountController
admin 企业账户 GET /pageGET /{id}POSTPUTDELETE /api/v1/user/account/enterprise admin:user:enterprise:* 企业账户管理 admin EnterpriseAccountController
client 企业账户 GETPUT /api/v1/user/account/enterprise client:user:enterprise:* 当前企业账户资料 client EnterpriseAccountController
admin 政府账户 GET /pageGET /{id}POSTPUTDELETE /api/v1/user/account/government admin:user:government:* 政府账户管理 admin GovernmentAccountController
admin 商户账户 GET /pageGET /{id}POSTPUTDELETE /api/v1/user/account/merchant admin:user:merchant:* 商户账户管理 admin MerchantAccountController
client 商户账户 GETPOSTPUT /api/v1/user/account/merchant client:user:merchant:* 商户入驻和资料维护 ops MerchantAccountController
shared 商户账户文件 GET /pageGET /{id}POSTPUTDELETE /api/v1/user/account/merchant/file *:user:merchant:file:* 商户资质文件 adminops MerchantAccountFileController
shared 员工账户 GETGET /pagePUT /api/v1/user/account/employee *:user:employee:* 员工账户查询和维护 adminops EmployeeAccountController
admin 收货地址管理 GET /pageGET /{addressId}POSTPUTDELETE /api/v1/user/account/address admin:user:address:* 后台地址管理 admin AccountAddressController
client 个人收货地址 GET /pageGET /selfGET /{addressId}POSTPUTDELETEPUT /{addressId}/isDefault /api/v1/user/personal/address client:user:personal:address:* 小程序地址管理 client PersonalAccountAddressController
client 个人钱包 GET /selfGET /{walletId}POST /withdraw /api/v1/user/personal/wallet client:user:wallet:* 个人钱包和提现 client PersonalWalletController
client 个人钱包流水 GET /pageGET /{transactionId} /api/v1/user/personal/wallet/transaction client:user:wallet:transaction:* 钱包流水查询 client PersonalWalletTransactionController
client 个人支付记录 GET /listGET /pageGET /{transactionId} /api/v1/user/personal/payment/transaction client:user:payment:transaction:* 支付流水查询 client PersonalPaymentTransactionController

前端封装

  • admin/src/api/captchaApi.tsusersApi.tsroleApi.tsmenuApi.tsaccountApi.tswalletApi.ts
  • client/api/index.jsuserfiledata 分组。
  • ops/api/auth.jsops/api/system.js

维护注意事项

  • 登录接口和用户资料接口是多端公共基础,变更字段时需要同步检查 adminclientops
  • 微信登录未绑定手机号时,前端不得写入完整登录态,避免用户绕过手机号绑定。
  • 角色、菜单和权限变更后,需要验证 /api/v1/info/api/v1/routers 返回是否和管理端菜单一致。
  • 地址接口需要保证默认地址唯一,下单页应优先使用默认地址。
  • 头像上传成功后,小程序需要重新拉取用户资料并刷新本地缓存。
  • 商户、员工和个人账户接口必须在后端做归属校验,不能只通过前端隐藏入口隔离数据。

联调验收

场景 验收口径
管理端登录 验证码、登录、用户信息、动态路由连续成功
权限控制 无权限用户访问接口返回 403 或业务拒绝,页面按钮不可见
微信未绑手机号 不写入完整登录态,绑定手机号后再进入业务首页
多账户用户 能正确查询个人、商户、员工等账户关系
默认地址 新增、修改和设置默认地址后,默认地址唯一
头像上传 上传后 fileId、头像 URL 和用户资料能同步刷新