- 移除登录页和注册页 `useDidShow` 中主动调用 `ensurePrivacyAuthorized()` 预检的逻辑 - 登录页不再主动弹出隐私协议弹窗,由微信在用户点击手机号登录按钮时强制触发授权 - 门店订单管理页面调用 `chooseProofImage` 前新增 `ensurePrivacyAuthorized()` 预检,确保上传凭证时授权 - 修改隐私弹窗文案为更通用描述,避免误导用户以为是相册授权 - 保留全局 `onNeedPrivacyAuthorization` 通过 `PrivacyModal` 处理,适配微信基础库强制机制 - 统一门店商品管理上传使用已内置预检的 `uploadFile()` 接口调用流程
2.7 KiB
2.7 KiB
手机号授权登录修复概述
修复内容
-
隐私协议授权流程修复(
src/app.tsx)- 原代码在
onNeedPrivacyAuthorization中直接resolve({ event: 'agree' }),在基础库 3.16.1+ 下无法通过微信校验。 - 新增
src/components/PrivacyModal,使用原生 Button 的open-type="agreePrivacyAuthorization"触发真正的隐私授权;Taro.showModal的按钮无法被微信识别。
- 原代码在
-
登录/注册页不再主动预检隐私协议
- 移除
src/passport/login.tsx和src/passport/register.tsx中useDidShow主动调用ensurePrivacyAuthorized()的逻辑。 - 进入登录页本身不再主动弹出隐私授权框;仅在用户点击手机号登录按钮,且微信检测到未授权时,才由微信强制触发
onNeedPrivacyAuthorization。
- 移除
-
门店中心上传图片前预检隐私协议
- 门店商品管理(
src/pages/store/goods/index.tsx)通过uploadFile()上传图片,该接口内部已调用ensurePrivacyAuthorized(),点击上传时自动触发隐私授权。 - 门店订单管理(
src/pages/store/orders/index.tsx)直接调用Taro.chooseImage上传凭证,已在其chooseProofImage中增加ensurePrivacyAuthorized()预检。
- 门店商品管理(
-
统一接口调用
- 登录/注册页统一使用
request.post+SERVER_API_URL调用/wx-login/loginByMpWxPhone。 - 修复
register.tsx原本错误使用https://shop-api.websoft.top的问题。
- 登录/注册页统一使用
-
顺手修复构建错误
src/passport/pay/index.tsx引用了不存在的@/api/passport/wx-login,改为使用@/api/layout中的getWxOpenId/loginByOpenId。
验证
npx taro build --type weapp 构建成功。
需要你确认的后台配置
- 小程序管理后台 → 设置 → 第三方设置 → 用户隐私保护指引 → 添加「开发者收集你的手机号」声明。
- 确认小程序已开通「手机号快速验证组件」能力,且调用额度充足。
测试前清理
由于之前 Taro.showModal 的授权无效,微信可能已缓存该状态。重新上传后请先在开发者工具或真机中清理小程序缓存,再重新进入登录页,触发新的 PrivacyModal。
重要说明
- 微信基础库 3.16.1+ 强制要求:调用
getPhoneNumber、chooseImage等敏感 API 前,用户必须先同意《用户隐私保护指引》。 - 即使登录页不再主动预检,当用户点击「手机号快捷登录」且未授权时,微信仍会强制弹出隐私授权框。这是微信机制,无法绕过。
- 如果用户已同意隐私协议但手机号登录仍失败,请重点检查后台是否已开通「手机号快速验证组件」能力,以及隐私指引中是否包含「手机号」声明。