C 端 app 现仅支持「手机号 + 短信验证码」登录(/infouser/user/lodeing,登录即注册)。本特性新增 Apple / Google / LINE 三方登录,降低台湾市场获客与登录摩擦。鉴权沿用现有自写 JwtUtil(HS256 JWT + Redis 会话),不引入新鉴权体系。
info_user_oauth 记录绑定关系)。info_user——已注册则关联到该老账号(写一条 oauth 绑定),未注册则新建账号后再绑定。不以邮箱做关联。sub(稳定用户ID),忽略 email。provider)。客户在登录页选 Apple/Google/LINE,客户端拿到 provider 凭证后调后端校验。
首次用某三方账号登录时,强制输手机号 + 短信验证码:手机号已注册→关联该账号;未注册→新建账号;随后建立 oauth 绑定。
已绑过该三方的账号再次登录,校验凭证通过即直接签发 token,免手机验证。
POST /infouser/user/oauthLogin {provider, credential, ...},后端校验 provider 凭证换取稳定 providerUid。oauth2/v2.1/token 换 access_token,再调 v2/profile 取 userId(Authorization Code 流程,不直接收前端 accessToken)。info_user_oauth:命中→校验用户 status/del_flag 正常后直接签发 token(claim provider)返回;未命中→缓存 {provider,providerUid} 到 Redis(短TTL),返回 needPhone + tempKey。POST /infouser/user/oauthBindPhone {tempKey, phone, code, ...}:取回缓存的 providerUid + 验短信码(复用 lodeing 逻辑,含万能码 8888)→ getuser(phone):已注册→关联;未注册→createUser 新建;随后 insert info_user_oauth(user_id, provider, provider_uid)。provider 字段(apple/google/line;手机号登录为 phone),供登录渠道统计或「未绑手机限制」类约束使用。@Anonymous 放行;受保护接口继续走 @Auth,零额外接入。GET /auth/line/callback(@Anonymous,LineCallbackController):接 LINE 重定向的 code → 复用 verify("line",code) 换 token 取 userId → 已绑定签 token / 未绑定生成 tempKey → 302 跳回 App scheme oauth.line.app-redirect(?token= / ?needPhone=1&tempKey= / ?error=,未绑定时 App 再调 /infouser/user/oauthBindPhone)。原 /oauthLogin 保留,覆盖前端自取 code 场景(H5/webview/SDK)。约束:oauth.line.redirect-uri 须与 LINE Console 回调白名单一致(否则 400 redirect_uri_mismatch)。id、user_id、provider(apple/google/line)、provider_uid、create_time。UNIQUE(provider, provider_uid) 用于按三方ID反查用户;user_id 普通索引。https://appleid.apple.com + exp。