uniapp 判断是否登录,是跳转至首页,否跳转至登录页

1.问题

在使用uni-app开发app 打包完成后 用户没登录首次进入跳转登录页 登录跳转至首页!

平常解决方法是onLaunch生命周期里面判断用户是否登录 但是有一个不好的体验就是每次进入程序先进入设定的第一个页面 在进入首页 这样体验不是很好~

2.解决

uni-app文档地址:https://uniapp.dcloud.io/collocation/manifest?id=splashscreen
H5+文档地址:http://www.html5plus.org/doc/zh_cn/navigator.html#plus.navigator.closeSplashscreen

使用plus.navigator.closeSplashscreen()
首先manifest.json app-plus 默认这两值是true 设置改为false 需要时在关闭

在这里插入图片描述
manifest.json 源码配置

"app-plus" : {
     "splashscreen" : {
         "alwaysShowBeforeRender" : false,
         "waiting" : true,
         "autoclose" : false,
         "delay" : 0
     }
 }

App.vue 文件 onLaunch 生命周期里面写法 (根据自己需求情况判断)这里是用到token判断存在跳转至首页 不存在跳转登录页

onLaunch: function() {
    console.log('App Launch');
    // #ifdef APP-PLUS
    // token标志来判断
    let token= uni.getStorageSync('token');    
    if (token) {
	    //存在则关闭启动页进入首页
		plus.navigator.closeSplashscreen();
	
    } else {
		//不存在则跳转至登录页
        uni.reLaunch({
            url: "/pages/login/login",
		    success: () => {
		        plus.navigator.closeSplashscreen();
		    }
    	})
    }
    // #endif
}
### UniApp 应用首次启动不跳转登录页解决方案 对于 UniApp 应用,在首次启动时不希望自动跳转登录页面的情况,可以采取以下措施来实现这一目标。 #### 1. 判断应用是否为首次启动 可以通过本地存储(如 `uni.setStorageSync` 和 `uni.getStorageSync` 方法)设置一个标志位来判断应用程序是否是第一次运行。如果该标志不存在,则认为这是初次启动;反之则不是[^1]。 ```javascript // 在 App.vue 的 onLaunch 生命周期钩子内执行如下逻辑 onLaunch() { const isFirstStart = !uni.getStorageSync('hasLaunched'); if (isFirstStart) { // 设置已启动过标记 uni.setStorageSync('hasLaunched', true); // 进入引导页或其他非登录界面 uni.reLaunch({ url: '/pages/guide/index' }); } else { // 正常进入首页或根据业务需求处理 checkLoginStatus(); } } ``` #### 2. 处理缓存问题引起的异常情况 当遇到由于缓存原因造成的问题时,可采用强制更新文件名的方式防止旧版本资源被加载,从而避免因缓存而导致的行为偏差[^2]。这一步骤虽然主要针对的是静态资源的管理,但对于确保整个项目的稳定性和一致性同样重要。 #### 3. 用户状态持久化保存与验证 为了使用户能够在关闭并重新打开应用后保持登录状态,应该考虑使用安全可靠的机制来进行会话管理和身份认证信息的安全储存。通常情况下,可以在成功登录之后将必要的 token 或者其他形式的身份凭证保存到本地,并在每次启动时读取这些数据以决定是否需要再次显示登录界面。 ```javascript function checkLoginStatus(){ let accessToken = uni.getStorageSync('accessToken'); if(accessToken){ // 已经有有效的 access_token, 可能已经登录过了 verifyTokenValid().then(isValid => { isValid ? navigateHome() : redirectToLoginPage(); }).catch(err=>{ console.error("验证token失败", err); redirectToLoginPage(); }) }else{ // 没有任何 token 存储记录,默认去往登录页 redirectToLoginPage(); } } async function verifyTokenValid(/* 参数 */){ /* 实现 */ } function navigateHome(){ /* 导航到主页函数 */ } function redirectToLoginPage(){ /* 跳转登录页函数 */} ``` 通过上述方法组合运用,能够有效控制 UniApp 应用程序在不同场景下的行为模式,特别是满足特定条件下阻止默认跳转的需求。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值