更新记录

1.0.0(2026-09-17) 下载此版本

  • 首个版本:封装自本项目 src/composables/auth-gate.ts(其前身是 uni1 的 shared/auth-gate)。
  • 四个守卫:requireLogin(操作级登录)、requireLoginPage(页面级登录,登录成功返回当前页)、 requireVersionPage(页面级版本,透传 wc-version)、requireVersionLoginPage(版本+登录组合)。
  • 宿主接线:setupWcAuthGate({ loginEntry, fallbackTabUrl }) 注入登录进入策略与兜底 tab 路由, 登录态判定走 wc-auth、版本判定走 wc-version,插件自身不感知项目路由。

平台兼容性

uni-app(5.24)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

uni-app x(5.24)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - - -

wc-auth-gate

页面前置守卫统一入口:登录(操作级 / 页面级)+ 版本(页面级)+ 组合守卫。 封装自 uni1 的 shared/auth-gate,登录态判定走 [wc-auth]、版本判定走 [wc-version]。

安装前置

  1. 已安装 wc-auth(登录态)与 wc-version(版本灰度,含 404 页)
  2. 宿主在 main.ts 调用一次 setupWcAuthGate()(见下)

宿主接线(main.ts)

插件不感知项目路由与登录 UX,「怎么进入登录」由宿主注入:

import { useLoginEntry } from "@/composables/useLoginEntry";
import { setupWcAuthGate } from "@/uni_modules/wc-auth-gate/commons/config";

// 登录进入策略复用项目 composable(小程序跳登录页 / H5 整页授权 + 协议确认)
const { startLogin } = useLoginEntry();
setupWcAuthGate({
    loginEntry: () => void startLogin(),
    fallbackTabUrl: "/pages/mine/index", // 缺省即此值;守卫取消且页面栈为空时的兜底 tab
});

未注入 loginEntry 时缺省跳 /pages/login/index(望潮系小程序约定);带 H5 授权等特殊策略的项目务必覆盖。

守卫一览

守卫 维度 级别 未通过行为 用法
requireLogin(action, name?) 登录 操作级 弹「去登录」,取消留在当前页 requireLogin(() => 提交(), '提交订单')
requireLoginPage(name?) 登录 页面级 弹「去登录」,取消返回上一页 onLoad(() => { if (!requireLoginPage('订单')) return })
requireVersionPage() 版本 页面级 静默 redirectTo 404 onLoad(() => { if (!requireVersionPage()) return })
requireVersionLoginPage(name?) 版本+登录 页面级 版本未放行 → 404;未登录 → 弹「去登录」 onLoad(() => { if (!requireVersionLoginPage('竞猜')) return })

组合守卫判定顺序:版本在前(功能整体收回时连页面都不该出现,静默无交互), 登录在后(功能内的身份要求,交互式引导)。

「登录成功返回当前页」的配套用法

小程序端登录页成功后 navigateBack 回本页,初始化统一放 onShow 接续:

import { requireLoginPage } from '@/uni_modules/wc-auth-gate/commons'
import { useAuthStore } from '@/uni_modules/wc-auth/commons'

const authStore = useAuthStore()
const initialized = ref(false)

onLoad(() => {
    if (!requireLoginPage('编辑资料')) return   // 未登录弹引导,modal 只弹这一次
})

onShow(() => {
    // 首次进入(已登录)或登录页返回后自动接续
    if (authStore.isLoggedIn && !initialized.value) {
        initialized.value = true
        void loadProfile()
    }
})

H5 端整页授权回跳后页面重载,onLoad 重新走守卫(已登录直通),同一套代码两端通用。

行为约定

说明
登录态判定 wc-authuseAuthStore().isLoggedIn(token 有效且未过期)
版本判定 wc-versionversionReleased(线上 siteConfig.version > 本地 VITE_VERSION)
进入登录 宿主注入的 loginEntry(缺省 navigateTo /pages/login/index
取消兜底 页面栈 >1 时 navigateBack;栈底 switchTab fallbackTabUrl
弹窗文案 「{页面名/动作名}需要先登录」,确认键「去登录」

范围说明

刻意不包含(保持简单):

  • 角色类守卫(运营者 / 管理员等,各项目身份字段不同,需要时参照组合守卫自行叠加)
  • 异步守卫(如"登录且资料完整"需拉接口的场景,由页面在 onShow 接续逻辑里处理)

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。