import { onShow } from "@dcloudio/uni-app"; import { ensureCurrentPageAuthorized } from "@/router/nav-guard"; /** * 页面级登录守卫(补 router/nav-guard 拦不到的那半边) * * uni.addInterceptor 只作用于站内跳转;H5 地址栏直达、分享链接冷启动、 * 小程序「编译进入指定页面」都不会调用任何导航 API, * 因此受保护页面必须在自己的 onShow 里再校验一次。 * * 放在 onShow 而不是 onLoad:从登录页 reLaunch 回来、或从后台切回前台时 * 令牌可能已经变化,每次显示都复核一次更稳妥。 * * @param onAuthorized 校验通过后的初始化回调(拉数据等),被拦走时不会执行 */ export function useAuthGuard(onAuthorized?: () => void): void { onShow(() => { if (!ensureCurrentPageAuthorized()) { return; } onAuthorized?.(); }); }