vue-router拦截
说明:以下均在main.js中添加。
主要思路
1.在路由分发时,检查本地缓存是否有账号信息,如果没有,跳转登陆页面,传入当前路由
2.在发送请求时,添加账号token
3.在接收请求时,检查响应的数据,核对状态码,如果状态码为登陆失效,则重新跳转登陆,传入当前路由
4.登陆界面登陆,跳转到登陆前的路由
理论上可去掉步骤1,步骤1内容在步骤2进行,但发送请求比路由跳转频繁很多(推测)
路由分发拦截
router.beforeEach((to, from, next)=>{//登陆拦截
if('/Login/Register'.indexOf(to.path)!==- || (getLogin().account && getLogin().password)){
next()
}else{
next({
path: '/Login',
query: { redirect: to.fullPath }//添加当前路由信息
})
}
})
添加token以及响应拦截
Vue.http.interceptors.push((request, next) => {
const token = Utils.getAuthorization()//添加令牌
if(''!==token){
// let loginInfo = Utils.getInfo()
// Utils.store.set('login', loginInfo.login, new Date().getTime()+STORE_AGE) //更新时间
// Utils.store.set('user', loginInfo.user, new Date().getTime()+STORE_AGE)
request.headers.set('Authorization', token)//添加token
}
let loadingInstance = Loading.service({//显示请求加载框
lock: true,
text: '拼命加载中...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0)'//最后一位透明度,0为全透明
});
next((response) =>{
loadingInstance.close()//关闭请求加载框
if(response.status=== && response.data.code===){//登陆失效拦截
Utils.goLogin(vue)
}
return response
})
})
登陆入口方法
function goLogin(_this) {
console.dir(_this.$router)
console.dir(_this.$route)
_this.$router.push({path: '/login', query: {redirect: _this.$route.path}})
}
$router: vue-resource实例

$route: 当前路由对象

登陆界面点击按钮触发方法代码
login(){
this.Utils.login(this, this.form, this.redirect)
}
登陆提交后台代码
function login(_this, formData, redirect) {
redirect = redirect==='/ChangePwd'? '/': redirect
_this.$http.post(PreURL+'login', this.buildForm(formData)).then((Response) => {
if( === Response.body.code){
store.set('login', formData, new Date().getTime()+STORE_AGE)
store.set('user', Response.body, new Date().getTime()+STORE_AGE)
_this.$router.push({ path: redirect||'/'})
}else{
mAlert(Response.body.message, _this)
}
})
}
function buildForm(formData) {
const account = formData.account;
const password = formData.password;
// const phone_uuid = formData.phone_uuid;
const time_stamp = String(Math.round(new Date().getTime() / ));
const random_str = String(Math.floor(Math.random() * ( - + ) + ));
const sha256 = CryptoJS.algo.SHA256.create();
sha256.update(password);
sha256.update(random_str);
sha256.update(time_stamp);
const encryption_str = sha256.finalize().toString();
return {
'phone_number': account,
'password': password,
'phone_uuid': '',
'time_stamp': time_stamp,
'random_str': random_str,
'encryption_str': encryption_str
};
}
vue对象获取
main.js中挂载到window下,其他页面直接用vue就能取到
/* eslint-disable no-new */
window.vue = new Vue({
el: '#app',
router,
components: { App },
template: '<App/>'
})
参考
vue-router拦截的更多相关文章
- vue router拦截器的简单使用
之前,为了实现router跳转的每个页面的url上都带上addressCode,然后用了一下router拦截器,很好用,当然也可以专门封装一个方法来实现(跳转的页面上带有addressCode),不过 ...
- Vue router拦截 如果用户并未登录直接跳转到登录界面(最简单的cookie演示)
router.beforeEach(function(to,from,next){ console.log('路由拦截') console.log(to.name) console.log(from. ...
- vue 路由拦截、axios请求拦截
路由拦截 项目中,有些页面需要登录后才能进入,例如,在某页面A,用户在操作前需要先进入登录页(此时需要将上一页的地址(/survey/start)作为query存入login页面的地址中,如: htt ...
- Vue 2.0 + Vue Router + Vuex
用 Vue.js 2.x 与相配套的 Vue Router.Vuex 搭建了一个最基本的后台管理系统的骨架. 当然先要安装 node.js(包括了 npm).vue-cli 项目结构如图所示: ass ...
- vue router 只需要这么几步
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Vue.js 2.x笔记:路由Vue Router(6)
1. Vue Router简介与安装 1.1 Vue Router简介 Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,构建单页面应用. Vue Rout ...
- Vue Router学习笔记
前端的路由:一个地址对应一个组件 Vue Router中文文档 一.路由基本使用 第1步:导入Vue Router: <script src="https://unpkg.com/vu ...
- vue router.push(),router.replace(),router.go()和router.replace后需要返回两次的问题
转载:https://www.cnblogs.com/lwwen/p/7245083.html https://blog.csdn.net/qq_15385627/article/details/83 ...
- vue axios拦截器 + 自编写插件 实现全局 loading 效果;
项目需求:用自定义的 .gif 图标实现全局 loading 效果:为避免在每个页面手动添加,且简单高效的实现,经查阅资料,最终采用了 vue axios拦截器 + 自编写 loading 插件:下面 ...
- 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI
一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...
随机推荐
- Summary (7Road)
今天有幸参加了一次考试,碰到的一些考题如下: 很多东西,明明都是会的,可是就是写不出来.可见自己的Linux基础还是很薄弱,懒得去记这些有用的东西.既然自己不是老板,不是项目经理,就该努力记住这些基础 ...
- 洛谷CF1071E Rain Protection(计算几何,闵可夫斯基和,凸包,二分答案)
洛谷题目传送门 CF题目传送门 对于这题,我无力吐槽. 虽然式子还是不难想,做法也随便口胡,但是一些鬼畜边界情况就是判不对. 首先显然二分答案. 对于每一个雨滴,它出现的时刻我们的绳子必须落在它上面. ...
- Hdoj 4540.威威猫系列故事——打地鼠 题解
Problem Description 威威猫最近不务正业,每天沉迷于游戏"打地鼠". 每当朋友们劝他别太着迷游戏,应该好好工作的时候,他总是说,我是威威猫,猫打老鼠就是我的工作! ...
- 【BZOJ3252】攻略(长链剖分,贪心)
[BZOJ3252]攻略(长链剖分,贪心) 题面 BZOJ 给定一棵树,每个点有点权,选定\(k\)个叶子,满足根到\(k\)个叶子的所有路径所覆盖的点权和最大. 题解 一个假装是对的贪心: 每次选择 ...
- 【转】分享两个基于MDK IDE的调试输出技巧
我们在STM32开发调试过程中,常常需要做些直观的输出,如果手头没有相关的设备或仪器,我们可以使用 IDE自带的工具.这里分享两个基于MDK IDE的调试输出技巧. 一.使用其自带的逻辑分析仪查看波 ...
- bootstrap学习一
bootstrap学习 一.css概览: 1.使用HTML5标准,<!DOCTYPE html>. 2.移动设备优先: <meta name="viewport" ...
- 【CF1154】题解
A 直接模拟即可. B 对数组中的值进行排序去重.发现若去重之后的数组中有大于 3 个数时无解,因为无法找到一个点到数轴上四个点的距离均相等.若去重之后的数组中只有三个值,则判断中间的值是否到两边的值 ...
- bzoj3238 差异
题目链接 思路 观察题目中的式子,可以发现前两项是定值.所以只需要求出最后一项就行了. 然后题目就转化为了求字符串中所有后缀的\(lcp\)长度之和. 可以想到用后缀数组.在后缀数组上两个后缀的\(l ...
- Django(十七)文件上传
http://www.cnblogs.com/wupeiqi/articles/5703697.html - 文件上传 - 普通上传 - 自定义页面上传按钮 ...
- 破解phpstorm
说下破解的版本:PHPstorm2018.2.2 打开phpstorm,选择Activation code 粘贴下面这段code EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEw ...