来源:
AGENTS.md(统一认证、公开路径)、API_REFERENCE.md(/api/auth/*、/api/articles/*部分公开、/api/media/upload公开)、黑盒方案 T-01~T-05。 关联用例:test-cases/guest.md(TC-G-01~TC-G-12)。
用户故事:作为还没注册的访客,我想一打开就能看到产品价值并找到登录入口,以便我决定是否注册。
wechat.test-mode 可开。splash / home 引流页。JwtInterceptor 拦截 /api/**(仅 8 个公开路径除外);游客不应看到业务数据。用户故事:作为新用户,我想用微信一键登录免去注册麻烦,以便快速进入家庭管理。
POST /api/auth/wechat-login → 返回 Result 含 token + 用户信息。parent,跳转家长首页。User + family_members(memberType=login)。AuthController /api/auth/* 公开;openid 关联 User,决定 memberType。用户故事:作为用户,我希望在小程序端用微信直接登录、在 Web 管理后台用微信扫码登录,以便不必记账号密码。
口径澄清(2026-11-01):小程序端不提供「手机号+验证码登录」。该能力在服务端以
send-code/phone-login保留,但小程序前端无任何入口(login-sheet仅open-type="getPhoneNumber"微信手机号快捷登录 + 微信授权),不作为产品路径测试。Web 管理后台登录方式为密码 / 验证码(现状)+ 微信扫码登录(待实现)。
admin / operator / finance / org_admin 等)。login-sheet → open-type="getPhoneNumber" → POST /api/auth/wechat-phone-login(微信手机号快捷授权登录)。POST /api/auth/wechat-login(见 SC-G-02)。POST /api/admin-auth/login-by-password(滑块验证 + 身份下拉)。POST /api/admin-auth/send-code → POST /api/admin-auth/login。state。POST /api/auth/send-code / POST /api/auth/phone-login 端点仍存在(服务端能力保留),小程序端无入口,不计入产品端登录路径。AuthController /api/auth/*;AdminAuthController /api/admin-auth/*;扫码登录参考 /api/auth/wechat-web(用户端小程序码扫码 SSO)。用户故事:作为被家人邀请的用户,我想通过邀请码/二维码直接加入家庭,以便立即成为成员。
POST /api/family/invite/generate 生成邀请码/二维码(含令牌与落地页)。POST /api/auth/register-with-invite(携带邀请令牌)。FamilyInviteController /api/family/invite/*;二维码含令牌+落地页(cfclub 特性)。用户故事:作为游客,我想随便看看商品和内容,但访问我的家庭/任务时必须先登录,以便数据安全。
/pages/family/index、/pages/tasks/index)。Authorization)。JwtInterceptor 返回 401 → 前端跳转登录页;登录后回跳原页。POST /api/product/list、文章列表 POST /api/articles/list → 可见内容(公开路径)。/api/** 一律拦截;登录态过期后接口统一 401。Authorization Header;8 个公开路径白名单。用户故事:作为未登录的访客,我想直接调用业务接口时被统一拦截,以便保护数据安全、不泄露内部错误细节。
POST /api/family/list、POST /api/task/list)。Authorization Header)。JwtInterceptor 校验 token → 返回 401/403。/api/** 一律拦截;缺 token / token 过期 / 非法 token 统一 401/403;错误信息不泄露内部堆栈或系统细节。JwtInterceptor;Authorization Header;8 个公开路径白名单;统一 Result<T>(code/message/data)。用户故事:作为联调期的测试人员,我想开启测试模式免真微信授权,以便快速验证登录流程而不依赖真实微信环境。
wechat.test-mode: true;小程序端对应配置开启。AGENTS.md 测试模式(wechat.test-mode);AuthController。用户故事:作为开发者/发布者,我希望小程序自动按环境选择 API 地址,以便 develop/trial/release 三环境无缝切换。
config.js 内置三套环境 API 地址。uni.getAccountInfoSync() 判定当前环境(develop/trial/release)。getAccountInfoSync 异常)回退默认(release)地址并告警;环境切换后缓存 token 按环境隔离。config.js 环境自适应;uni.getAccountInfoSync()。用户故事:作为已登录用户,我想安全退出并清除本地登录态,以便换号登录或保护设备隐私。
AuthController;本地缓存管理。用户故事:作为尚未注册的用户,我想在登录失败时被引导去注册,以便顺畅完成新用户建档。
User。AuthController;User + family_members 建档逻辑。用户故事:作为首次使用用户,我想查看隐私政策与用户协议并确认同意,以便合规进入核心流程。
AgreementController;合规告知。用户故事:作为通过非微信浏览器(如手机 Safari/Chrome)打开小程序链接的用户,我想获得明确引导,以便知道如何在微信内使用。
config.js 环境探测;H5 兜底页。