在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试卷自动排版系统
Jul 18 Javascript
jQuery UI AutoComplete 自动完成使用小记
Aug 21 Javascript
自写的一个jQuery圆角插件
Oct 26 Javascript
更优雅的事件触发兼容
Oct 24 Javascript
jquery中get,post和ajax方法的使用小结
Feb 04 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
Aug 23 Javascript
AngularJS基础 ng-dblclick 指令用法
Aug 01 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
Jul 17 Javascript
JS switch判断 三目运算 while 及 属性操作代码
Sep 03 Javascript
对于Javascript 执行上下文的全面了解
Sep 05 Javascript
ionic3双击返回退出应用的方法
Sep 17 Javascript
小程序Scroll-view上拉滚动刷新数据
Jun 21 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
再说下636单管机
2021/03/02 无线电
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
python基础教程项目二之画幅好画
2018/04/02 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
python多维数组切片方法
2018/04/13 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
python一键去抖音视频水印工具
2018/09/14 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
python的help函数如何使用
2020/06/11 Python
init进程的作用
2012/04/12 面试题
个人贷款承诺书
2014/03/28 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
中层干部考核评语
2015/01/04 职场文书
车间安全生产管理制度
2015/08/06 职场文书
详解Redis主从复制实践
2021/05/19 Redis
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL