解决uniapp token失效跳到登录页showToast不显示

文章描述了在uni应用开发中,如何通过uni.reLaunch()方法重定向到登录页面,以及在用户未登录时使用setTimeout设置登录提示toast的过程。
uni.reLaunch({
   
   
	url: "/pages/login/login"
})
setTimeout(() => {
   
   
	uni.showToast({
   
   
		title: 
### 未获取token时自动跳转登录页的实现方法 在Vue3和UniApp项目中,当用户未获取到有效的token时,可以采用以下方式实现自动跳转至登录页面的功能。以下是具体的实现方案: #### 1. **全局生命周期钩子验证** 在应用启动时或页面加载时,通过`onLaunch`或`onShow`生命周期钩子检查是否存在token。如果存在,则直接跳转到登录页面。 ```javascript // App.vue export default { onLaunch() { const token = uni.getStorageSync('token'); // 从本地存储中获取token if (!token) { // 如果没有token console.log('no token'); uni.reLaunch({ // 使用reLaunch确保登录页无法返回 url: "/pages/login/login" }); return; } }, onShow() { const token = uni.getStorageSync('token'); // 每次页面显示时再次检查token if (!token) { uni.reLaunch({ url: "/pages/login/login" }); } } } ``` [^3] #### 2. **页面级生命周期钩子验证** 在每个页面的`onLoad`或`onShow`生命周期中进行token验证。如果token无效或存在,则跳转到登录页面。 ```javascript // 示例页面 export default { onShow() { const userToken = uni.getStorageSync('token'); // 获取token if (!userToken) { // 如果token存在 uni.showToast({ title: '请重新登录', icon: 'none' }); uni.reLaunch({ // 跳转到登录页 url: "/pages/login/login" }); } else { this.initData(); // 初始化页面数据 } }, methods: { async initData() { // 页面初始化逻辑 } } } ``` [^2] #### 3. **Axios拦截器中的token验证** 在网络请求中集成Axios拦截器,用于在每次请求前验证token的有效性。如果token无效或存在,则跳转到登录页面。 ```javascript import axios from 'axios'; // 请求拦截器 axios.interceptors.request.use(config => { const token = uni.getStorageSync('token'); // 获取token if (token) { config.headers['Authorization'] = `Bearer ${token}`; // 设置请求头中的token } return config; }, error => { return Promise.reject(error); }); // 响应拦截器 axios.interceptors.response.use(response => { return response; }, error => { if (error.response && error.response.status === 401) { // 如果返回401状态码 uni.showToast({ title: '登录已过期,请重新登录', icon: 'none' }); uni.reLaunch({ url: "/pages/login/login" // 跳转到登录页 }); } return Promise.reject(error); }); ``` [^1] #### 4. **登录流程与token保存** 在用户登录成功后,将token保存到本地存储中,并在后续请求中携带token。 ```javascript const handleLogin = async () => { try { const res = await api.login({ username: 'test', password: '123456' }); if (res.status === 'y') { // 登录成功 uni.setStorageSync('token', res.data.token); // 保存token uni.navigateTo({ url: '/pages/index/index' // 跳转到首页 }); } } catch (error) { console.error('登录失败:', error); } }; ``` [^4] #### 5. **性能优化与错误处理** - 合理使用生命周期钩子,避免必要的token检查。 - 在拦截器中添加防抖机制,防止频繁触发跳转逻辑。 - 提供清晰的错误提示信息,提升用户体验。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值