说明:以下均在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拦截的更多相关文章

  1. vue router拦截器的简单使用

    之前,为了实现router跳转的每个页面的url上都带上addressCode,然后用了一下router拦截器,很好用,当然也可以专门封装一个方法来实现(跳转的页面上带有addressCode),不过 ...

  2. Vue router拦截 如果用户并未登录直接跳转到登录界面(最简单的cookie演示)

    router.beforeEach(function(to,from,next){ console.log('路由拦截') console.log(to.name) console.log(from. ...

  3. vue 路由拦截、axios请求拦截

    路由拦截 项目中,有些页面需要登录后才能进入,例如,在某页面A,用户在操作前需要先进入登录页(此时需要将上一页的地址(/survey/start)作为query存入login页面的地址中,如: htt ...

  4. Vue 2.0 + Vue Router + Vuex

    用 Vue.js 2.x 与相配套的 Vue Router.Vuex 搭建了一个最基本的后台管理系统的骨架. 当然先要安装 node.js(包括了 npm).vue-cli 项目结构如图所示: ass ...

  5. vue router 只需要这么几步

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. Vue.js 2.x笔记:路由Vue Router(6)

    1. Vue Router简介与安装 1.1 Vue Router简介 Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,构建单页面应用. Vue Rout ...

  7. Vue Router学习笔记

    前端的路由:一个地址对应一个组件 Vue Router中文文档 一.路由基本使用 第1步:导入Vue Router: <script src="https://unpkg.com/vu ...

  8. 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 ...

  9. vue axios拦截器 + 自编写插件 实现全局 loading 效果;

    项目需求:用自定义的 .gif 图标实现全局 loading 效果:为避免在每个页面手动添加,且简单高效的实现,经查阅资料,最终采用了 vue axios拦截器 + 自编写 loading 插件:下面 ...

  10. 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI

    一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...

随机推荐

  1. 洛谷P3953 逛公园(NOIP2017)(最短/长路,拓扑排序,动态规划)

    洛谷题目传送门 又是一年联赛季.NOIP2017至此收官了. 这个其实是比较套路的图论DP了,但是细节有点恶心. 先求出\(1\)到所有点的最短路\(d1\),和所有点到\(n\)的最短路\(dn\) ...

  2. django从零开始-视图

    1.处理的登录请求 views文章中添加登录函数login_action def login_action(request): if request.method == 'POST': usernam ...

  3. Manacher's Algorithm && 647. Palindromic Substrings 计算回文子串的算法

    注:转载自:https://www.cnblogs.com/love-yh/p/7072161.html

  4. 合法括号序列(dp+组合数学)

    键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字符串恰好一个合法的括号序列. 每按一次左括号(,字符串末尾追加一个左括号( 每按一次右括号),字符串末尾追加一个右括号 ...

  5. Python之面向对象编程学习

    不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...

  6. react-native中使用长列表

    React Native 提供了几个适用于展示长列表数据的组件,一般而言我们会选用FlatList或是SectionList. FlatList组件用于显示一个垂直的滚动列表,其中的元素之间结构近似而 ...

  7. (Prim算法)codeVs 1078 最小生成树

    题目描述 Description 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 约翰已经给他的农场安排了一条高速的网络线路,他想把这 ...

  8. C# 实现身份验证之WebApi篇

    今天再来总结关于如何实现WebApi的身份验证,以完成该系列所有文章,WebApi常见的实现方式有:FORM身份验证.集成WINDOWS验证.Basic基础认证.Digest摘要认证  第一种:FOR ...

  9. M1-day08-数据库加锁

    一.关于数据库加锁主要分为几类 1.原生sql 1.开启事物 begin; select * from host for update; commit; 注意:INNODB支持表锁和行锁,MyISAM ...

  10. Kafka吞吐量测试案例

    Kafka吞吐量测试案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 领英公司参考连接:https://www.slideshare.net/JiangjieQin/produc ...