Files
xinlong-shop-taro/overview.md
赵忠林 ce1e2bd4dd refactor(privacy): 调整隐私授权触发逻辑,登录页取消主动预检
- 移除登录页和注册页 `useDidShow` 中主动调用 `ensurePrivacyAuthorized()` 预检的逻辑
- 登录页不再主动弹出隐私协议弹窗,由微信在用户点击手机号登录按钮时强制触发授权
- 门店订单管理页面调用 `chooseProofImage` 前新增 `ensurePrivacyAuthorized()` 预检,确保上传凭证时授权
- 修改隐私弹窗文案为更通用描述,避免误导用户以为是相册授权
- 保留全局 `onNeedPrivacyAuthorization` 通过 `PrivacyModal` 处理,适配微信基础库强制机制
- 统一门店商品管理上传使用已内置预检的 `uploadFile()` 接口调用流程
2026-07-16 01:40:16 +08:00

2.7 KiB
Raw Blame History

手机号授权登录修复概述

修复内容

  1. 隐私协议授权流程修复src/app.tsx

    • 原代码在 onNeedPrivacyAuthorization 中直接 resolve({ event: 'agree' }),在基础库 3.16.1+ 下无法通过微信校验。
    • 新增 src/components/PrivacyModal,使用原生 Button 的 open-type="agreePrivacyAuthorization" 触发真正的隐私授权;Taro.showModal 的按钮无法被微信识别。
  2. 登录/注册页不再主动预检隐私协议

    • 移除 src/passport/login.tsxsrc/passport/register.tsxuseDidShow 主动调用 ensurePrivacyAuthorized() 的逻辑。
    • 进入登录页本身不再主动弹出隐私授权框;仅在用户点击手机号登录按钮,且微信检测到未授权时,才由微信强制触发 onNeedPrivacyAuthorization
  3. 门店中心上传图片前预检隐私协议

    • 门店商品管理(src/pages/store/goods/index.tsx)通过 uploadFile() 上传图片,该接口内部已调用 ensurePrivacyAuthorized(),点击上传时自动触发隐私授权。
    • 门店订单管理(src/pages/store/orders/index.tsx)直接调用 Taro.chooseImage 上传凭证,已在其 chooseProofImage 中增加 ensurePrivacyAuthorized() 预检。
  4. 统一接口调用

    • 登录/注册页统一使用 request.post + SERVER_API_URL 调用 /wx-login/loginByMpWxPhone
    • 修复 register.tsx 原本错误使用 https://shop-api.websoft.top 的问题。
  5. 顺手修复构建错误

    • src/passport/pay/index.tsx 引用了不存在的 @/api/passport/wx-login,改为使用 @/api/layout 中的 getWxOpenId / loginByOpenId

验证

npx taro build --type weapp 构建成功。

需要你确认的后台配置

  • 小程序管理后台 → 设置 → 第三方设置 → 用户隐私保护指引 → 添加「开发者收集你的手机号」声明。
  • 确认小程序已开通「手机号快速验证组件」能力,且调用额度充足。

测试前清理

由于之前 Taro.showModal 的授权无效,微信可能已缓存该状态。重新上传后请先在开发者工具或真机中清理小程序缓存,再重新进入登录页,触发新的 PrivacyModal。

重要说明

  • 微信基础库 3.16.1+ 强制要求:调用 getPhoneNumberchooseImage 等敏感 API 前,用户必须先同意《用户隐私保护指引》。
  • 即使登录页不再主动预检,当用户点击「手机号快捷登录」且未授权时,微信仍会强制弹出隐私授权框。这是微信机制,无法绕过。
  • 如果用户已同意隐私协议但手机号登录仍失败,请重点检查后台是否已开通「手机号快速验证组件」能力,以及隐私指引中是否包含「手机号」声明。