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。用户 provider 为 apple、google、line(旧版)、line_user;骑手为 apple_rider、google_rider、line_rider;商家为 apple_merchant、google_merchant、line_merchant。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_user/line_rider/line_merchant;手机号登录为 phone),供登录渠道统计或「未绑手机限制」类约束使用。@Anonymous 放行;受保护接口继续走 @Auth,零额外接入。GET /auth/line/callback(@Anonymous,LineCallbackController):接收 provider 与 LINE 重定向的 code → 复用 verify(provider, code) 换 token 取 userId → 已绑定签 token / 未绑定生成 tempKey → 302 跳回 provider 对应 App scheme(?token= / ?needPhone=1&tempKey= / ?error=,未绑定时 App 再调 /infouser/user/oauthBindPhone)。原 /oauthLogin 保留,覆盖前端自取 code 场景(H5/webview/SDK)。line_user、line_rider、line_merchant。三个客户端继续自行构造 LINE 授权地址,共用 GET /auth/line/callback,通过回调 URL 的 provider 查询参数选择对应 Channel 配置;provider 只能取上述三个白名单值。provider 查询参数。line_user 沿用普通用户首次登录的手机号关联/新建逻辑;line_rider 只允许绑定已有且有效的 userType=2 账号;line_merchant 只允许绑定已有且有效的 userType=1/3/4/5 账号,不自动创建骑手或商家。info_user.phone;骑手和全部商家账号(userType=1/2/3/4/5)统一使用 info_user.tel_phone。有效商家/骑手的 tel_phone 不得重复,软删除账号(del_flag!='0')不占用手机号;手机号按存储字符串精确比较,0912... 与 +886... 视为不同号码。普通用户的 phone 可与商家/骑手的 tel_phone 相同。user_id。line_user、line_rider、line_merchant 分别签发普通用户、骑手、商家 App 会话 token,并跳回对应 App scheme。id、user_id、provider(apple/google/line_user/line_rider/line_merchant)、provider_uid、create_time。UNIQUE(provider, provider_uid) 用于按三方ID反查用户;user_id 普通索引。https://appleid.apple.com + exp。apple_rider、apple_merchant、google_rider、google_merchant,各端独立校验 audience,不回退到用户端 client ID。userType=2,商家仅允许已有有效 userType=1/3/4/5;通过 tel_phone 验证绑定,不自动创建业务账号。子账号继续校验启用状态与归属权限。QS_TOKEN_KEY / SH_APP_TOKEN_KEY,用户原有 apple、google 配置、绑定和 token 类型保持兼容。provider=line 和不带 provider 的 /auth/line/callback,旧授权地址换 token 时使用原 redirect URI。line / line_user 均可读取旧、新绑定;不直接执行数据迁移。POST /auth/line/authorize 签发五分钟有效的 provider 绑定 state;回调和直接提交 code 均要求单次消费,App 比较回跳 state。用户旧 LINE 协议保持不变。