在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 相关文章推荐
css图片自适应大小
Nov 28 Javascript
jQuery的ready方法详解
Nov 27 Javascript
jQuery中prev()方法用法实例
Jan 08 Javascript
JavaScript DOM 学习总结(五)
Nov 24 Javascript
浅谈JS中逗号运算符的用法
Jun 12 Javascript
Canvas 制作动态进度加载水球详解及实例代码
Dec 09 Javascript
php输出全部gb2312编码内的汉字方法
Mar 04 Javascript
基于node下的http小爬虫的示例代码
Jan 11 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
Jan 15 Javascript
深入理解Node内建模块和对象
Mar 12 Javascript
uniapp与webview之间的相互传值的实现
Jun 29 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 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简单的会话类代码
2011/08/08 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
jquery cookie的用法总结
2013/11/18 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
计算机专业毕业生求职信分享
2013/12/24 职场文书
城建学院毕业生自荐信
2014/01/31 职场文书
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
家长写给老师的建议书
2014/03/13 职场文书
初中教师业务学习材料
2014/05/12 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
保护环境建议书作文400字
2015/09/14 职场文书