|
|
a6340250f2
|
feat(App): 宿主接入短信登录 + app_identity/app_bind
- mixin 新增 _appIdentityFlow:有 token → GET wechat/app_identity;
无 openid → uni.login(weixin) → POST wechat/app_bind → 再取身份
- _silenceAuthOpenid 在 APP-PLUS 下改走该流程(不碰 wx.login)
- 首页壳/容器页:未登录时停止自动重试,兜底屏给「登录后继续」;
登录页成功后 reLaunch 回原页(首页 / 容器页带原 url)
- App 的 requestProfile 改为直接查共享资料并回传 hash(不弹面板、
不调 getPhoneNumber,规避 web-view 覆盖页内浮层)
- api/user.js 新增 appIdentity / appBind
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-26 20:04:42 +08:00 |
|
|
|
b45a190a59
|
chore: 入库生产基线(2026-10-26 工作树快照)
- 含首页壳/容器页/授权页/分享图/首页配置等此前未入库的在途改动
- 新增未跟踪的 pages/index/mall.vue(第 5 个 tabBar 页,pages.json 已引用)
- 排除本地备份文件(*.bak* / *.origin-bak)
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-26 17:07:49 +08:00 |
|
|
|
e99b4a475c
|
fix(身份): 宿主页「拿到 openid 才加载 H5」+ 复用 App.vue 并行登录(不重复换 code)
背景(2026-09-20 线上排查):删掉小程序缓存重进时 H5 以访客态加载(孕周 `--`、档案空、
跳应用不带 openid,实测跳授权示例是裸 URL)。服务端证据:该设备只打了 `/api/mp/apps`,
没有任何带 openid 的 profile/pregnancy 调用 —— 宿主那次没注入身份,不是数据丢了。
根因:
1) App.vue 静默授权只处理 token 分支:v2/wechat/silence_auth 对新用户 / 强制绑定手机号返回
{auth_login:1, key, openid, unionid}(无 token),openid 被丢掉;且 res.data.userInfo 缺失时
取 .uid 会抛异常把后续 commit 一起带走。
2) 两个宿主页只从 store.openid / 缓存 OPENID / JWT 读身份,读不到就匿名加载(首页壳不等不重试,
容器页 _finalizeUrl / _fetchOpenidAndLoad 兜底)。
改法:
- App.vue:补「无 token 但有 openid」分支(SET_OPENID + 缓存,unionid 同理);userInfo 判空;
**并把这次静默登录的 promise 挂到 globalData._silenceAuthPromise**(供宿主页复用,见下)。
- mixins/webviewHost.js:新增
· _silenceAuthOpenid()(wx.login → v2/wechat/silence_auth,兼容 auth_login/userInfo/JWT 三种
openid 来源,拿到即落 store + 缓存,带 8s 超时保险丝);
· _awaitHostLogin(timeout)(等 App.vue 那次登录结束,**不重复换 code**)。
- 两个宿主页统一 fail-closed「拿到 openid 才加载」,并且**第 1 次先 await App.vue 的并行登录**、
命中缓存就直接加载;之后才自己取。**网络尝试上限 3 → 2,退避 600×n → 固定 500ms**
(实测:code2session 约 200–300ms,重复换一次就是白花这个钱;最坏等待从 ~3.5s 降到 ~1–2.5s)。
- 首页壳:读不到身份就不设 webUrl(停在小程序自己的加载屏,文案分「取身份中/失败/页面加载失败」三态);
2 次仍失败 → 「未获取到微信身份」+「重新获取身份」。
- 容器页:三条失败分支(有 token 无 openid 的重试失败、无 token 无 openid、onShow 仍无 openid)
全部改走 _ensureIdentityThenLoad();删除本页重复实现的 _fetchOpenidAndLoad;新增兜底屏
(以前 url 为空是白屏)。非可信域(商城自身域名等)不注入身份、照常直接加载。
- utils/util.js:注释里的方法名同步(_fetchOpenidAndLoad → _ensureIdentityThenLoad)。
⚠️ 提交同时包含这两处**此前已存在的未提交 WIP**(同文件、改动交织):pages/annex/web_view/index.vue
的 mixin 重构(handleMessage→handleHostMessage 等 4 处 handler 改名)与 pages/index/index.vue
的两行 tabBar 调整。
⚠️ 刻意 fail-closed:CRMEB silence_auth 整体不可用时会停在失败屏而不是降级加载。
⚠️ 未动 manifest.json 版本号(见另一次改动:已统一为 0.3.6 / 36)。
|
2026-09-20 23:50:31 +08:00 |
|
|
|
6f033db7d4
|
fix(auth): 链路B原生面板回传基址 —— requestProfile 消息带 href 优先用作面板基址
- 面板弹出=requestProfile 消息送达;同一条消息带 href(H5 发起面板时的当前地址)
→ 提交后按它回传,不赌 shareHref 的 postMessage 派发时机(宫格换应用后可能旧地址)
- 不带 href 时回退调用处基址(shareHref || webUrl || MAMA_HOME),向后兼容
- 配套协议:h5-auth-standard.md §4.2 requestProfile 增加 href(推荐带)
需重新发版生效
|
2026-09-19 17:14:12 +08:00 |
|
|
|
3df3e08252
|
fix(auth): 授权回传落点改确定性通道 —— backUrl 经 navigateTo query 传递
- 授权页 onLoad 读 options.backUrl(H5 发起授权时带上的当前地址),成功时写进
__AUTH_RESULT__.backUrl
- consumeAuthResult 优先用 res.backUrl 做回传基址(不再赌 postMessage 派发时机:
微信只在后退/销毁/分享时批量派发,宫格 location.href 换应用后 shareHref 可能
还是上一个应用的地址 → 授权后被踢回 mama-box 首页)
- 配套:mama-box wx-auth.js requestProfile / goAuth 已带 backUrl(mama-box d39e52c)
需重新发版生效
|
2026-09-19 16:56:00 +08:00 |
|