feat: 免授权直达 H5 — 无 token 不再跳登录页,按需授权(requireAuth 返回后刷新身份)

This commit is contained in:
2026-07-31 11:25:39 +08:00
parent 96571fee73
commit edb084bd7a
2 changed files with 20 additions and 9 deletions

View File

@@ -13,7 +13,6 @@
import store from '@/store';
import { HTTP_REQUEST_URL, TRUSTED_DOMAINS } from '@/config/app';
import { LOGIN_STATUS } from '@/config/cache';
import { toLogin } from '@/libs/login';
function base64Decode(str) {
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
@@ -138,7 +137,8 @@ export default {
},
onShow() {
// 登录返回后:页面仍在栈中,onLoad 不会再次触发
// 检查是否有保存的 URL 和 token,重新处理身份
// 1) 首次登录返回(savedUrl 有值,url 未设置)→ 用保存的 URL 重新处理身份
// 2) H5 内 requireAuth 跳登录页返回 → url 已有值,但 token/身份可能刚更新 → 强制刷新注入新身份
if (this.savedUrl && store.state.app.token && !this.url) {
console.log('[web_view] onShow: 登录返回,重新处理 URL:', this.savedUrl.substring(0, 80));
const targetUrl = this.savedUrl;
@@ -150,6 +150,15 @@ export default {
console.warn('[web_view] onShow: 仍无 openid,加载原始URL');
this._finalizeUrl(targetUrl);
}
} else if (this.url && store.state.app.token) {
// H5 授权登录返回:重新注入最新身份(openid 可能刚获取到)
const { openid, unionid } = getCurrentUser();
const currentUrl = this.url;
const urlOpenid = getUrlParam(currentUrl, 'openid');
if (openid && urlOpenid !== openid) {
console.log('[web_view] onShow: 授权返回,刷新身份 openid=', openid);
this._applyIdentity(currentUrl, openid, unionid, urlOpenid);
}
}
},
methods: {
@@ -242,9 +251,10 @@ export default {
this._applyIdentity(targetUrl, openid, unionid, urlOpenid);
return; // _applyIdentity 内部已调用 _finalizeUrl,避免163重复覆盖
} else {
console.log('[web_view] 无 token,跳转登录');
this.savedUrl = targetUrl;
toLogin();
// 无 token:不拦截,匿名直达 H5(openid 为空)
// 用户需要手机号/头像/昵称时,由 H5 调 bridge.requireAuth() 再授权
console.log('[web_view] 无 token,匿名加载 H5(按需授权)');
this._finalizeUrl(targetUrl);
return;
}
} else {