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 相关文章推荐
js字符串完全替换函数分享
Dec 03 Javascript
jQuery菜单插件用法实例
Jul 25 Javascript
JavaScript中的return语句简单介绍
Dec 07 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
Mar 13 Javascript
vue.js实现含搜索的多种复选框(附源码)
Mar 23 Javascript
基于jquery实现二级联动效果
Mar 30 jQuery
详解利用jsx写vue组件的方法示例
Jul 17 Javascript
Js利用prototype自定义数组方法示例
Oct 20 Javascript
vue实现商城上货组件简易版
Nov 27 Javascript
使用nvm和nrm优化node.js工作流的方法
Jan 17 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
Jul 22 Javascript
使用vuex存储用户信息到localStorage的实例
Nov 11 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
PHP 字符串 小常识
2009/06/05 PHP
PHP 判断变量类型实现代码
2009/10/23 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
DOM相关内容速查手册
2007/02/07 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
JavaScript极简入门教程(一):基础篇
2014/10/25 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
vue 中filter的多种用法
2018/04/26 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
送给程序员的20个Java集合面试问题
2014/08/06 面试题
爷爷追悼会答谢词
2014/01/24 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫