关于vue的前端项目中token使用以及验证机制 携带token登录详情 vue-router的跳转说明

在login.vue中通过发送http请求获取token
//根据api接口获取token
var url = ‘http://www.baidudd.com’ + "/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"]);

vuex中mutations的token保存,也可以是localStorage或者是存在sessionStorage
if (store.state.token) {
this.$router.push(‘/‘)
console.log(store.state.token)
} else {
this.$router.replace(‘/login‘);
}

——关于vue-router的跳转补充说明——————————————

注意这个replace(‘/login’)是没有历史记录的

router.go(-1或n) 返回history的上一步或者在history的记录里前进或者后退n整数步骤
类似 window.history.go(n)

router.push(‘/home’)
在 history 栈 中 添加一个新的history记录 当用户点击浏览器后退按钮时,则退回之前的 URL。

router.replace(‘login’)
用法和它的方法名一样 —— 替换掉当前的 history 记录。不在history栈里面留有历史记录,在浏览器中不存在前进或者后退的按钮,通常用于带有token验证的登录或注册
————————————————

}).catch(err => {
// this.$message.error(err.status)
this.loading = false
this.loginBtn = "登录"
this.$message.err(‘账号或密码错误‘);
// console.log(err)
})

在vuex中的store.js中对token状态进行监管

import Vue from ‘vue‘
import Vuex from ‘vuex‘
Vue.use(Vuex)
vuex的使用token的存储,购物车等
export default new Vuex.Store({
state:{
token:‘ ‘
},

保存token
mutations:{
set_token(state, token) {
state.token = token
sessionStorage.token = token.//localStorage.token = token

},

删除token
del_token(state) {
state.token = ‘‘
sessionStorage.removeItem(‘token‘)
}
}
})

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

全局默认配置:
Axios.defaults.headers.common[‘Authentication-Token‘] = store.state.token;

// 添加请求拦截器
Axios.interceptors.request.use(config => {
// 在发送请求之前做些什么
//判断是否存在token,如果存在将每个页面header都添加token
if(store.state.token){

请求头配置全局token
config.headers.common[‘Authentication-Token‘]=store.state.token
}

return config;
}, err => {
// 对请求错误做些什么
return Promise.reject(err);
});

// http response 拦截器
Axios.interceptors.response.use(
response => {

return response;
},
err=> {
if (error.response) {
switch (err.response.status) {
case 401:
this.$store.commit(‘del_token‘);
router.replace({
path: ‘/login‘,
query: {redirect: router.currentRoute.fullPath}//登录成功后跳入浏览的当前页面
})
}
}
return Promise.reject(err.response.data)
});

原文地址:https://www.cnblogs.com/bgml/p/11386116.html

时间: 2024-10-10 22:19:57

关于vue的前端项目中token使用以及验证机制 携带token登录详情 vue-router的跳转说明的相关文章

使用vue cli开发项目中遇到的坑

一.部署文件 使用vue cli 开发项目,执行npm run build命令生成dist静态文件,将dist文件包放到服务器中即可. 刚接触webpack,不知道怎么部署前端文件,原以为需要将app文件上传,在 inux上安装node,以及npm install 一系列的包,捣鼓了很久,发现只需要执行 npm run build 将源码打包成一个静态文        文件即可,上传静态文件dist,将 controller指向index.html. 二.跨域问题 实行前后端分离,使用vue i

如何在前端项目中引用bootstrap less?

在基于bootstrap css框架的前端项目开发中,如果有grunt build系统,那么工作流是:客制化less,在less中定义自己的 CSS,同时可以随意引用bootstrap中预定义好的css类,一旦保存文件,grunt则开始重新构建,生成最后的生产文件.问题是: 如何能够在自己的客制less文件中引入bootstrap的less变量或者mixin呢? 比如:我如何能够实现在屏幕尺寸在@screen-md时,将所有的图片隐藏呢? 对于这个场景,假设项目目录结构如下: > bower_c

前端项目中gulp的使用

在公司项目开发中,有一个前端项目,我们使用gulp来生成目标文件(css,js,html文件) 进入到这个项目目录中  C:\My Project\FrontEnd\TestBuilder 然后依次运行如下命令: npm install npm run build gulp  default (假如 gulpfile.js 中gulp的任务名字是 default) 原文地址:https://www.cnblogs.com/wphl-27/p/9626763.html

DotNet项目中的一些常用验证操作

在项目中需要对用户输入的信息,以及一些方法生成的结果进行验证,一般在项目中较多的采用js插件或js来进行有关信息的校验,但是从项目安全性的角度进行考虑,可对系统进行js注入. 如果在后台对用户输入的信息进行验证会相对的安全,在出现信息验证不合法时,可以直接在程序中抛出异常,终止程序的运行. 现在提供几种较为常用的验证方法,可以减少在项目中开发时间和错误性: 1.判断域名:         /// <summary>         /// 普通的域名         /// </summ

spring 项目中使用 hibernate validator验证输入参数

1 hibernate validator 官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/ 在 springboot 项目中 spring-boot-starter-web 已经包含了 hibernate-validator 可以直接使用.否则需要在 maven 依赖中添加依赖项. <dependency> <groupId>org.hibernate.valid

JAVA WEB项目中生成验证码及验证实例(附源码及目录结构)

[我是一个初学者,自己总结和网上搜索资料,代码是自己敲了一遍,亲测有效,现将所有的目录结构和代码贴出来分享给像我一样的初学者] 作用 验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意破解密码.刷票.论坛灌水.有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录. 原理 在servlet中随机生成一个指定位置的验证码,一般为四位,然后把该验证码保存到session中.在

前端项目中使用git来做分支和合并分支,管理生产版本

最近由于公司前端团队扩招,虽然小小的三四团队开发,但是也出现了好多问题.最让人揪心的是代码的管理问题:公司最近把版本控制工具从svn升级为git.前端H5组目前对git的使用还不是很熟悉,出现额多次覆盖代码和提交冲突的问题.还有最近一次产品版本迭代的时候出现额一个问题: 一个正在开发的版块在下一次版本迭代中不需要上线了,而是修改了这个版块的一些小细节.这个正在开发的版块需要在下下一次产品迭代的时候上线. 这里来简单的记录下使用git做代码版本控制的方法:(主要是建立分支,在分支上修改当前版本的b

最近移动前端项目中遇到的两个坑

尽管要多加避免,但还别说,坑还真得常踩常有,不要以为手机端都是 Webkit 的天下就简单,不用处理浏览器之间的兼容问题,--其实不一致性的问题还是挺大的. 两个 bug 都是涉及 iframe 的--iframe 真是不好搞! 事情是这样的,一个内嵌于 iframe 的页面,因为需要从认证接口中返回 token 作为登录凭证,读取接口信息是没问题的,然后需要用 session 把登录信息保存起来.奇怪的是,session 无效,就像丢失了一样!脱离了 iframe 就是单独页面的话就没事.而且

VUE+webpack+npm项目中的多语言[email&#160;protected]

一.[email protected]安装 二.引入[email protected] 1 import VueI18n from 'vue-i18n' 2 Vue.use(VueI18n) 三.引入使用的组件语言包(如:elementUI) 1 import enLocale from 'element-ui/lib/locale/lang/en' 2 import zhLocale from 'element-ui/lib/locale/lang/zh-CN' 3 import Elemen