uni-app 登录成功后自动跳转至登录前页面(H5\微信小程序)

embedded/2025/2/26 6:23:33/

uni-app 登录成功后自动跳转至登录前页面

一、新建配置文件,位于根目录下,config.js

// 应用全局配置
module.exports = {// 应用信息appInfo: {loginPage: "/pages/login",cacheRouteKey: "unLoginTargetRoute"// 更多配置项...}// 更多配置项...
}

二、新建文件:router.js,位于:utils文件夹下

import { appInfo } from '@/config.js'export function cacheRouter(_router) {let router = _router// 获取当前页面栈信息const pages = getCurrentPages()if(pages && pages.length) {// 获取当前页面路由信息const currentPage = pages[pages.length - 1]router = '/' + currentPage.routeif(router !== appInfo.loginPage) {let options = undefined// #ifdef MP-WEIXINoptions = currentPage.options// #endif// #ifdef H5if(currentPage.__page__) {options = currentPage.__page__.options}// #endifif(options) {let params = ''for(let key in options) {params += '&' + key + '=' + options[key]}if(params && params.length) {router += '?' + params.substring(1)}} else {// #ifdef MP-WEIXINif(currentPage.$page && currentPage.$page.fullPath) {router = currentPage.$page.fullPath}// #endif// #ifdef H5if(currentPage.__page__ && currentPage.__page__.fullPath) {router = currentPage.__page__.fullPath}// #endif}}}if(router) {uni.setStorageSync(appInfo.cacheRouteKey, router)}
}

三、H5兼容适配

在App.vue中添加以下代码

import config from '@/config.js'
import { cacheRouter } from '@/utils/router.js'onLaunch: function() {//#ifdef H5this.checkLogin()//#endif
},
methods: {checkLogin() {if(// TODO 未登录判断) {const _uri = window.location.hreflet _route = ''// 默认【域名+#+页面】分割值if (_uri.indexOf('#') !== -1) {_route = _uri.substring(_uri.indexOf('#') + 1)}// h5/:为manifest.json下【Web配置 -> 运行的基础路径】if (_uri.indexOf('h5/') !== -1) {_route = _uri.substring(_uri.indexOf('h5/') + 3)}cacheRouter(_route)uni.reLaunch({url: config.appInfo.loginPage})}}
}

四、通配

在拦截器或后端请求方法中,引入方法,合适位置添加使用方法代码即可。
例如:

1、拦截器

// 页面跳转验证拦截器
import { appInfo } from '@/config.js'
// 登录页面
const loginPage = appInfo.loginPage// 页面白名单
const whiteList = [loginPage, '/pages/register', '/pages/common/webview/index'
]// 检查地址白名单
function checkWhite(url) {const path = url.split('?')[0]return whiteList.indexOf(path) !== -1
}let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]
list.forEach(item => {uni.addInterceptor(item, {invoke(to) {if (// TODO 验证是否登录) {if (to.url === loginPage) {uni.reLaunch({url: "/"})}return true} else {if (to.url !== loginPage) {// 缓存当前路由信息cacheRouter(to.url)}// 验证是否放行if (checkWhite(to.url)) {return true}uni.reLaunch({url: loginPage})return false}},fail(err) {console.log(err)}})
})

2、后端请求方法

import config from '@/config'
import { cacheRouter } from '@/utils/router.js'
const loginPage = config.appInfo.loginPage// TODO 判断接口返回状态码code是否正常,通常code=401时,代表未登录
if (code === 401) {cacheRouter()showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => {if (res.confirm) {// TODO 跳转登录页面}})
}

五、登录页面

import { appInfo } from '@/config.js'// 登录成功后调用,处理函数
loginSuccess(result) {let unLoginTargetRoute = uni.getStorageSync(this.appInfo.cacheRouteKey)if (unLoginTargetRoute) {uni.removeStorageSync(this.appInfo.cacheRouteKey)} else {unLoginTargetRoute = '/pages/index'}uni.reLaunch({url: unLoginTargetRoute})
}

六、注销登录,移除缓存

import { appInfo } from ‘@/config.js’

uni.removeStorageSync(this.appInfo.cacheRouteKey)

至此,大功告成

个人博客:紫琪软件工作室


http://www.ppmy.cn/embedded/167213.html

相关文章

嵌入式人工智能应用-第四章 支持向量机 9

文章目录 1 支持向量机(Support Vector Machine, SVM)1.1 背景介绍1.1.1 线性可分1.1.3 最大间隔超平面1.1.4 支持向量1.2 支持向量机问题描述1.3 线性SVM的算法的数学建模1.3.1 决策面方程1.3.2 分类“间隔计算模型”1.3.3 常见核函数1.4 支持向量机的优缺点1.4.1 优点1.4.2…

python-leetcode-字符串解码

394. 字符串解码 - 力扣(LeetCode) class Solution:def decodeString(self, s: str) -> str:stack []num 0curr_str ""for char in s:if char.isdigit():num num * 10 int(char)elif char [:stack.append((curr_str, num))curr_str, …

DeepSeek赋能机器人革命:从推理引擎到行业落地的全栈技术实践

——解析大模型如何重塑机器人产业的智能化未来 引言:机器人产业的技术范式转移 在2025年全球机器人市场规模突破2000亿美元的关键节点,DeepSeek凭借其创新的"推理优先"技术架构,正在重构机器人产业的智能化路径。通过将大模型的认知推理能力与机器人执行系统深…

神经网络 - 神经元

人工神经元(Artificial Neuron),简称神经元(Neuron),是构成神经网络的基本单元,其主要是模拟生物神经元的结构和特性,接收一组输入信号并产生输出。 生物学家在 20 世纪初就发现了生物神经元的结构。一个生物神经元通常具有多个树…

当单片机遇到这颗LED驱动芯片,

最近和一个小伙伴调试一个驱动芯片 这是一颗简单的 LED 驱动芯片,串行LED 驱动芯片 芯片驱动核心时序如下 常规的LED驱动方式是一个GPIO口控制一个 LED 灯,如果要控制LED灯的亮度的话,GPIO口还需要具备PWM的功能。 这颗芯片的特点是串联式的&…

2025中国经济白皮书赋能CES Asia,国际合作成新亮点

近日,2025年中国经济白皮书的发布,为第七届亚洲消费电子技术贸易展(CES Asia 2025)的招商工作带来了重大利好消息,其在国际合作方面展现出的显著优势,成为吸引全球企业参与的重要因素。 白皮书重申了中国坚…

Tag标签的使用

一个非常适合运用在vue项目中的组件:Tag标签。 目录 一、准备工作 1、安装element-plus库 2、配置element-plus库 二、Tag标签入门 1、打开element官网,搜索tag标签 2、体验Tag标签的基础用法 三、Tag标签进阶训练1 1、定义一个数组,…

【论文解读】《Training Large Language Models to Reason in a Continuous Latent Space》

论文链接 1. 背景与动机 语言空间与推理的矛盾 目前大多数大语言模型(LLMs)在解决复杂问题时采用链式思维(Chain-of-Thought, CoT)方法,即利用自然语言逐步推导出答案。然而,论文指出: 自然语言…