在vue中获取token,并将token写进header的方法


Posted in Javascript onSeptember 26, 2018

需要准备的东西:Vue+axios+Vuex+Vue-router

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)
});

以上这篇在vue中获取token,并将token写进header的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript教程之不完整的继承(js原型链)
Jan 13 Javascript
jquery中trigger()无法触发hover事件的解决方法
May 07 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
Jan 20 Javascript
基于jquery二维码生成插件qrcode
Jan 07 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
Jan 16 Javascript
Angular中实现树形结构视图实例代码
May 05 Javascript
jQuery中 DOM节点操作方法大全
Oct 12 jQuery
vue 插值 v-once,v-text, v-html详解
Jan 19 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
May 30 Javascript
vue中使用极验验证码的方法(附demo)
Dec 04 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
Oct 23 Javascript
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
基于axios 解决跨域cookie丢失的问题
Sep 26 #Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
Sep 26 #Javascript
基于JavaScript实现一个简单的Vue
Sep 26 #Javascript
微信小程序授权登录及解密unionId出错的方法
Sep 26 #Javascript
vue根据进入的路由进行原路返回的方法
Sep 26 #Javascript
vue-router之nuxt动态路由设置的两种方法小结
Sep 26 #Javascript
Vue 配合eiement动态路由,权限验证的方法
Sep 26 #Javascript
You might like
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
php 定界符格式引起的错误
2011/05/24 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
PHP中实现中文字串截取无乱码的解决方法
2018/05/29 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
详解Django的model查询操作与查询性能优化
2018/10/16 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
Python操作Jira库常用方法解析
2020/04/10 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
解决python运行启动报错问题
2020/06/01 Python
Python如何解除一个装饰器
2020/08/07 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
医学专业五年以上个人求职信
2013/12/03 职场文书
美丽乡村建设实施方案
2014/03/23 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
客服专员岗位职责
2015/02/10 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫