feat: 免授权直达 H5 — 无 token 不再跳登录页,按需授权(requireAuth 返回后刷新身份)
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -15,7 +15,6 @@ import {
|
||||
} from '../config/app.js';
|
||||
import { LOGIN_STATUS } from '../config/cache.js';
|
||||
import store from '../store';
|
||||
import { toLogin } from '../libs/login';
|
||||
import {
|
||||
customerType
|
||||
} from '@/api/api.js'
|
||||
@@ -263,9 +262,11 @@ export default {
|
||||
}
|
||||
console.log('[GoUrl] 最终参数: openid=' + (openid || '(空)') + ', unionid=' + (unionid || '(空)') + ', t=' + Math.floor(Date.now() / 1000));
|
||||
if (!openid) {
|
||||
// 先存目标路径,登录后自动跳回 web_view
|
||||
Cache.set('login_back_url', '/pages/annex/web_view/index?url=' + encodeURIComponent(openUrl));
|
||||
toLogin();
|
||||
// 无 openid:不拦截,匿名进入 H5(需要身份时由 H5 调 bridge.requireAuth() 再授权)
|
||||
console.log('[GoUrl] 无 openid,匿名加载 H5(按需授权)');
|
||||
uni.navigateTo({
|
||||
url: `/pages/annex/web_view/index?url=${encodeURIComponent(openUrl)}`
|
||||
});
|
||||
return;
|
||||
}
|
||||
const joiner = url.indexOf('?') !== -1 ? '&' : '?';
|
||||
|
||||
Reference in New Issue
Block a user