在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 相关文章推荐
表格奇偶行设置不同颜色的核心JS代码
Dec 24 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
jQuery中ajax的post()方法用法实例
Dec 26 Javascript
js验证身份证号有效性并提示对应信息
Oct 19 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
Apr 26 Javascript
jQuery实现大图轮播
Feb 13 Javascript
JavaScript装饰器函数(Decorator)实例详解
Mar 30 Javascript
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
JS正则表达式完美实现身份证校验功能
Oct 18 Javascript
AngularJs ng-change事件/指令的用法小结
Nov 01 Javascript
微信小程序实现手势滑动卡片效果
Aug 26 Javascript
解决vue-router 嵌套路由没反应的问题
Sep 22 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
php实现的在线人员函数库
2008/04/09 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
JavaScript多并发问题如何处理
2015/10/28 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
Python交换变量
2008/09/06 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
Python常见字典内建函数用法示例
2018/05/14 Python
Python语言快速上手学习方法
2018/12/14 Python
Python ATM功能实现代码实例
2020/03/19 Python
Python类super()及私有属性原理解析
2020/06/15 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
竞选副班长演讲稿
2014/04/24 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python