基于Vue实现登录模块流程总结

07月19日 收藏 0 评论 0 前端开发

基于Vue实现登录模块流程总结

文章声明:转载来源:https://blog.csdn.net/qq_42539194/article/details/112644838

实现登录整体流程
用户输入用户名密码,在axios请求头中添加apikey并以表单形式提交给服务器,服务器认证通过后,返回token值并存储到localstorage中,在axios请求拦截器中加入【config.headers.token=localStorage.token】以便下次访问资源能携带token。

1.UI与数据
很简单,两个input标签一个账号一个密码。最后来一个button登录按钮,一个登录表单就实现了。

在登录组件中定义form存放数据,将name和password分别绑定账号和密码的对话框(点击“登录”按钮时就将这个form数据提交服务器)

data() {
//这里存放数据
return {
form:{
name:'',
password:''
}
};
},

2.请求服务器获取token
在设计登录模块时候,我们肯定是想用户登录一次就ok了,不需要反复登录,直接存储用户的账号和密码在前端十分不安全,所以一般操作是将用户名密码提交服务器后,服务器返回token值,那么我们接收到了这个token后存起来(一般在local Storage中),之后所有的请求数据都带上这个token才可以获取到。

axios部分基础代码:
这里设置了两个拦截器分别对请求和响应进行拦截设置,请求最关键的就是config.headers.token=localStorage.token在每次请求数据时都能将服务器返回的token塞进去。最后将axios抛出,以便在main函数内给原型上定义它使其在每个 Vue 的实例中可用。

切记token不要放到header中写死,否则只有第一次会带着token,应该在request请求拦截器中设置config.headers.token=localStorage.token;

import Axios from 'axios';
import {baseUrl}from '@/config.js';

let axios=Axios.create({
baseURL:baseUrl,
headers:{
APIKEY:'6f81900c18bd4967ba4cb0b6cd123456'
}
});
//请求拦截器
axios.interceptors.request.use((config)=>{
config.headers.token=localStorage.token;
return config;
},(err)=>{
console.log('request拦截器出错',err);
});
//响应拦截器
axios.interceptors.response.use((res)=>{
const {status,data,headers,config}=res;
//304是从缓存读取数据,也是成功
if (status>=200&&status<300||status==304) {
//【用户登陆】的时候data有返回的数据,headers有服务器给的token验证
//【用户注册】的时候也能返回这两个字段
return {data,headers};
}
else{
console.log('response响应失败');
throw res;
}
},(err)=>{
console.log('response拦截器出错',err);
throw err;
});

export default axios;

main部分基础代码:
在vue的原型上定义,其他vue实例只要this.$axios即可调用axios访问服务器。

//引入axios并加入全局组件
import axios from './axios.js';
Vue.prototype.$axios=axios;

vuex部分基础代码:
其中state中的token要从localStorage中获取,这样用户只要不清空浏览器,始终都可以登录。

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);

const store =new Vuex.Store({
state:{
token:localStorage.token
},
mutations:{
setToken(state,myToken){
state.token=myToken,
//向内存中存token
localStorage.token=myToken
}
},
actions:{

}
});

export default store;

UI登录方法基础代码:
async/await异步获取登录结果,因为在axios中response响应拦截器中 定义只返回data和header【return {data,headers}】,所以这里直接拿{data}即可,其中就可以获取token如图所示:

获取token之后,将token存如vuex中state中,在vuex中再将token存入localstorage中【看vuex代码】,这样任何界面都可以从localstorage中获取token了,最后在axios里request拦截器添加token【看axios代码】。

methods: {
...mapMutations(['setToken']),
async login(){
let {data}=await this.$axios.post('/user/login',this.form);
//console.log('登录data',data.data);
let {token}=data.data;
//console.log('登录token',token);
//向vuex中传递token数据
this.setToken(token);
}
},

3.总结
到目前为止,一个简单的登录逻辑就实现了,我们可以发现写一个登录页面十分容易,但是想写好还是有难度的,本文仅仅是提供一个基础流程,力求清晰易懂。
后期在这个基础上还可以扩展很多很多内容,比如角色分配,权限分配,根据权限懒加载不同组件展示不同的内容.............................这里我也在学习中..................欢迎大家交流学习

C 0条回复 评论

帖子还没人回复快来抢沙发