vuex存储token示例


Posted in Javascript onNovember 11, 2019

1.在login.vue中通过发送http请求获取token

//根据api接口获取token 
var url = this.HOST + "/session"; 
this.$axios.post(url, { 
username: this.loginForm.username, 
password: this.loginForm.pass 
}).then(res => { 
// console.log(res.data); 
this.$message.success('登录成功'); 
let data = res.data; 
//根据store中set_token方法将token保存至localStorage/sessionStorage中,data["Authentication-Token"],获取token的value值 
this.$store.commit('set_token', data["Authentication-Token"]); 
 
if (store.state.token) { 
this.$router.push('/') 
console.log(store.state.token) 
} else { 
this.$router.replace('/login'); 
} 
 
}).catch(error => { 
// this.$message.error(error.status) 
this.loading = false 
this.loginBtn = "登录" 
this.$message.error('账号或密码错误'); 
// console.log(error) 
 
})

2.在store.js中对token状态进行监管

import Vue from 'vue' 
import Vuex from 'vuex' 
 
 
Vue.use(Vuex) 
 
export default new Vuex.Store({ 
state:{ 
token:'' 
}, 
mutations:{ 
set_token(state, token) { 
state.token = token 
sessionStorage.token = token 
}, 
del_token(state) { 
state.token = '' 
sessionStorage.removeItem('token') 
} 
} 
})

3.在router/index.js中

// 页面刷新时,重新赋值token 
if (sessionStorage.getItem('token')) { 
store.commit('set_token', sessionStorage.getItem('token')) 
} 
 
const router = new Router({ 
mode: "history", 
routes 
}); 
 
router.beforeEach((to, from, next) => { 
if (to.matched.some(r => r.meta.requireAuth)) {      //这里的requireAuth为路由中定义的 meta:{requireAuth:true},意思为:该路由添加该字段,表示进入该路由需要登陆的 
if (store.state.token) { 
next(); 
} 
else { 
next({ 
path: '/login', 
query: {redirect: to.fullPath} 
}) 
} 
} 
else { 
next(); 
} 
})

4.在main.js中定义全局默认配置:

Axios.defaults.headers.common['Authentication-Token'] = store.state.token;

5.在src/main.js添加拦截器

// 添加请求拦截器 
Axios.interceptors.request.use(config => { 
// 在发送请求之前做些什么 
//判断是否存在token,如果存在将每个页面header都添加token 
if(store.state.token){ 
config.headers.common['Authentication-Token']=store.state.token 
} 
 
return config; 
}, error => { 
// 对请求错误做些什么 
return Promise.reject(error); 
}); 
 
// http response 拦截器 
Axios.interceptors.response.use( 
response => { 
 
return response; 
}, 
error => { 
 
if (error.response) { 
switch (error.response.status) { 
case 401: 
this.$store.commit('del_token'); 
router.replace({ 
path: '/login', 
query: {redirect: router.currentRoute.fullPath}//登录成功后跳入浏览的当前页面 
}) 
} 
} 
return Promise.reject(error.response.data) 
});

1.在login.vue中通过发送http请求获取token

//根据api接口获取token 
var url = this.HOST + "/session"; 
this.$axios.post(url, { 
username: this.loginForm.username, 
password: this.loginForm.pass 
}).then(res => { 
// console.log(res.data); 
this.$message.success('登录成功'); 
let data = res.data; 
//根据store中set_token方法将token保存至localStorage/sessionStorage中,data["Authentication-Token"],获取token的value值 
this.$store.commit('set_token', data["Authentication-Token"]); 
 
if (store.state.token) { 
this.$router.push('/') 
console.log(store.state.token) 
} else { 
this.$router.replace('/login'); 
} 
 
}).catch(error => { 
// this.$message.error(error.status) 
this.loading = false 
this.loginBtn = "登录" 
this.$message.error('账号或密码错误'); 
// console.log(error) 
 
})

2.在store.js中对token状态进行监管

import Vue from 'vue' 
import Vuex from 'vuex' 
 
 
Vue.use(Vuex) 
 
export default new Vuex.Store({ 
state:{ 
token:'' 
}, 
mutations:{ 
set_token(state, token) { 
state.token = token 
sessionStorage.token = token 
}, 
del_token(state) { 
state.token = '' 
sessionStorage.removeItem('token') 
} 
} 
})

3.在router/index.js中

// 页面刷新时,重新赋值token 
if (sessionStorage.getItem('token')) { 
store.commit('set_token', sessionStorage.getItem('token')) 
} 
 
const router = new Router({ 
mode: "history", 
routes 
}); 
 
router.beforeEach((to, from, next) => { 
if (to.matched.some(r => r.meta.requireAuth)) {      //这里的requireAuth为路由中定义的 meta:{requireAuth:true},意思为:该路由添加该字段,表示进入该路由需要登陆的 
if (store.state.token) { 
next(); 
} 
else { 
next({ 
path: '/login', 
query: {redirect: to.fullPath} 
}) 
} 
} 
else { 
next(); 
} 
})

4.在main.js中定义全局默认配置:

Axios.defaults.headers.common['Authentication-Token'] = store.state.token;

5.在src/main.js添加拦截器

// 添加请求拦截器 
Axios.interceptors.request.use(config => { 
// 在发送请求之前做些什么 
//判断是否存在token,如果存在将每个页面header都添加token 
if(store.state.token){ 
config.headers.common['Authentication-Token']=store.state.token 
} 
 
return config; 
}, error => { 
// 对请求错误做些什么 
return Promise.reject(error); 
}); 
 
// http response 拦截器 
Axios.interceptors.response.use( 
response => { 
 
return response; 
}, 
error => { 
 
if (error.response) { 
switch (error.response.status) { 
case 401: 
this.$store.commit('del_token'); 
router.replace({ 
path: '/login', 
query: {redirect: router.currentRoute.fullPath}//登录成功后跳入浏览的当前页面 
}) 
} 
} 
return Promise.reject(error.response.data) 
});

以上这篇vuex存储token示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript面向对象之四 继承
Feb 08 Javascript
浅谈javascript中的作用域
Apr 07 Javascript
jQuery中hasClass()方法用法实例
Jan 06 Javascript
JavaScript实现点击自动选择TextArea文本的方法
Jul 02 Javascript
浅谈javascript中的事件冒泡和事件捕获
Dec 28 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
Aug 14 jQuery
vue 之 .sync 修饰符示例详解
Apr 21 Javascript
JS获取并处理php数组的方法实例分析
Sep 04 Javascript
vue下使用nginx刷新页面404的问题解决
Aug 02 Javascript
javascript的delete运算符知识点总结
Nov 19 Javascript
微信小程序登陆注册功能的实现代码
Dec 10 Javascript
浅谈TypeScript 索引签名的理解
Oct 16 Javascript
Vuex实现数据增加和删除功能
Nov 11 #Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
Nov 11 #Javascript
vue 实现通过vuex 存储值 在不同界面使用
Nov 11 #Javascript
使用vuex存储用户信息到localStorage的实例
Nov 11 #Javascript
JS中比较两个Object数组是否相等方法实例
Nov 11 #Javascript
vue把输入框的内容添加到页面的实例讲解
Nov 11 #Javascript
vue与django集成打包的实现方法
Nov 11 #Javascript
You might like
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
php实现微信企业转账功能
2018/10/02 PHP
javascript下string.format函数补充
2010/08/24 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
from 表单提交返回值用post或者是get方法实现
2013/08/21 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
python中嵌套函数的实操步骤
2019/02/27 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
django model通过字典更新数据实例
2020/04/01 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
python高级特性简介
2020/08/13 Python
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
烹饪大赛策划方案
2014/05/26 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
合作合同协议书范本
2015/01/27 职场文书
学校财务管理制度
2015/08/04 职场文书
python实现简单的名片管理系统
2021/04/26 Python
Mysql中存储引擎的区别及比较
2021/06/04 MySQL