Skip to content

uniapp微信小程序新规定《游客模式》处理方法

更新: 2025/5/23 字数: 0 字 时长: 0 分钟

工具类添加跳转方法,并在 main.js 导入工具类跳转方法统一使用

javaScript
/**
 * @description uni.navigateTo
 * @param String  url 跳转的页面路径
 * @param Boolean isLogin 是否需要登录
 */
export function jumpPage(url, isLogin = false) {
	let token = uni.getStorageSync('token')

	if (url) {
		if (isLogin && !token) {
			uni.showModal({
				content: "该模块需要登录,请前往登录后使用完整功能",
				confirmText: "确认",
				success: (res) => {
					if (res.confirm) {
						uni.reLaunch({
							url: '/pages/tabbar/login'
						})
					}
				}
			})
			return
		}
		uni.navigateTo({
			url,
			success(res) {
				// console.log('跳转res',err);
			},
			fail(err) {
				console.log('跳转err', err);

			}
		})
	} else {
		uni.showToast({
			icon: "none",
			title: '功能未开放'
		})
	}
}

响应拦截器做处理,如果未登录则在响应拦截器,例如,后端返回 401

javaScript
if (data.code == 401) {
			uni.clearStorageSync()
			let exists = uni.getStorageSync('token_expired') || false
			// 获取当前打开过的页面路由数组
			let pages = getCurrentPages();
			// 获取当前页面路由,即数组中最后一个元素的路由
			let curRoute = pages[pages.length - 1].route;
			console.log(curRoute);
			let whiteUrl = ['pages/tabbar/mine']
			if (!exists && !whiteUrl.includes(curRoute)) {
				uni.setStorageSync('token_expired', true)
				uni.showModal({
					content: "该模块需要登录,请前往登录后使用完整功能",
					confirmText: "确认",
					success: (res) => {
						if (res.confirm) {
							uni.reLaunch({
								url: '/pages/tabbar/login'
							})
						} else {
							uni.reLaunch({
								url: '/pages/tabbar/consumerHome'
							})
						}
					}
				})
			}
}

whiteUrl为本地白名单,用于处理,即使返回 401,页面也依然可以访问,这种情况通常出现在个人中心,在没有登录的情况下,onShow 生命周期获取用户信息 返回 401,如果不添加这个白名单,则依旧弹窗