在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 相关文章推荐
jquery新的绑定事件机制on方法的使用方法
Apr 15 Javascript
JavaScript中函数(Function)的apply与call理解
Jul 08 Javascript
jQuery中extend函数详解
Jul 13 Javascript
浅谈javascript中的constructor
Jun 08 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
Jun 14 Javascript
jquery easyui DataGrid简单示例
Jan 23 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
May 11 Javascript
vue使用技巧及vue项目中遇到的问题
Jun 04 Javascript
详解ES6 Symbol 的用途
Oct 14 Javascript
基于vue的验证码组件的示例代码
Jan 22 Javascript
使用preload预加载页面资源时注意事项
Feb 03 Javascript
vue+elementUI实现简单日历功能
Sep 24 Javascript
基于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
第十三节 对象串行化 [13]
2006/10/09 PHP
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
深入理解PHP中的count函数
2016/05/31 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
tagName的使用,留一笔
2006/06/26 Javascript
Javascript与vbscript数据共享
2007/01/09 Javascript
jQuery Ajax使用 全解析
2010/12/15 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
javascript实现checkbox全选的代码
2015/04/30 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
C#可否对内存进行直接的操作
2015/02/26 面试题
元旦晚会策划方案
2014/02/18 职场文书
工程力学专业自荐信范文
2014/03/17 职场文书
班组长竞聘书
2014/03/31 职场文书
文明工地标语
2014/06/16 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang