作者:拍友2502914703 | 来源:互联网 | 2023-09-06 19:40
最近修改了俩个vue项目登陆逻辑,摸摸摸,三改四改,总结了一些思路:
文章目录
- 首先,理清好思路
- 1.什么样的情况下是登陆状态(初始化加载 => App.vue)
- 2. 没有登陆的情况下,项目的显示状态是什么(页面的路由=>router>index.js)
- 3. 登陆的情况下,项目的显示状态是什么(页面的路由=>router>index.js)
- 4. 登陆失效的时候要做什么事情(请求响应过期的时候)
- 核心知识
- 小总结
首先,理清好思路
- 什么样的情况下是登陆状态(如有token)
- 没有登陆的情况下,项目的显示状态是什么(如不可进入什么页面)
- 登陆的情况下,项目的显示状态是什么(可以进入什么页面,不可进入什么页面)
- 登陆失效的时候要做什么事情(请求响应过期的时候)
1.什么样的情况下是登陆状态(初始化加载 => App.vue)
-
封装一个获取登陆凭证(token)的函数,或者一个js文件,只是获取,返回 token
const data = await getToken();
如果只是需要取本地的token(const token = localStorage.getItem('token')
)一行代码,那可能不需要;
但是如果涉及到其他的操作,最好就进行封装。
有条件可以判断token的有效以及更新token,减少token过期的几率
async getToken(){const token = localStorage.getItem('token');const data = null;if(token){try{data = await checkToken(token);} catch(err){}}return data;
}
-
这个 data 有点讲究,它可以是有token的,也可以是没有token的,方便下一步进行判断,因此可以现行进行定义, 这样无论有没有成功获取到token都可以进行操作
const data = null;
try{data = await getToken();
}.catch(err=>{})
-
处理 data
if(data){
}else{
}
4. 结束初始化加载:定义一个变量来记录项目的加载情况,不一定要,但有利于路由的跳转控制
this.SET_LOADEDSTATUS(true);
localStorage.setItem('loaded',true);
一整个初始化加载的逻辑就结束了,当项目创建的时候开始执行,总结:
export default {data(){return{}},methods:{},async mounted(){}
}
2. 没有登陆的情况下,项目的显示状态是什么(页面的路由=>router>index.js)
- 在上一步的加载过程中,如果没有登陆,跳转的是登陆页。
- 接下来需要考虑,如果不是在加载的情况下,用户自行输入其他页面的链接,是否可以进入?
- 也就是说,在没有登陆的情况下,到底哪些页面不可以进入,要进行拦截,这里我用到了路由守卫
router.beforeEach((to, from, next) => {if(to.path !== '/start_page' && !Vuex.state.login && !Vuex.state.loading){return next('/start_page');} next();
})
3. 登陆的情况下,项目的显示状态是什么(页面的路由=>router>index.js)
- 同样的道理,如果用户在登陆的情况下,要去登陆页,你是否让他去,是否要做什么操作
router.beforeEach((to, from, next) => {if(to.path !== '/start_page' && !Vuex.state.login && Vuex.state.loading){return next('/start_page');} if(to.path === '/start_page' && Vuex.state.login && Vuex.state.loading) {return next('/home');}next();
})
总结:看个人需求进行操作
4. 登陆失效的时候要做什么事情(请求响应过期的时候)
- 在axios请求的时候响应登陆过期的情况,此时token已经没有用了,在拦截器统一处理接下来的操作,比如说,跳转到登陆页,删除掉原来存储的token,把登陆状态设置为没有登陆
axios.interceptors.response.use(async config => {if(config.data.code === 401) {}
核心知识
- 项目的生命周期
- vuex / 本地存储
- 路由守卫
- axios封装
- async await / promise
小总结
方法可能不太对,也是自己瞎摸摸摸出来的,有什么不对的或者更好的欢迎指正。
之前写项目,到最后总是因为登陆逻辑写不好,导致漏洞百出,各种问题出现,前期的封装工作真的要处理好,要不然后期简直给自己找罪受。
文章目录
- 首先,理清好思路
- 1.什么样的情况下是登陆状态(初始化加载 => App.vue)
- 2. 没有登陆的情况下,项目的显示状态是什么(页面的路由=>router>index.js)
- 3. 登陆的情况下,项目的显示状态是什么(页面的路由=>router>index.js)
- 4. 登陆失效的时候要做什么事情(请求响应过期的时候)
- 核心知识
- 小总结