说明:以下均在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. Configure new Nagios clients

    安装rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm -Uvh http:// ...

  2. [luogu1341]无序字母对【欧拉回路】

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 分析 欧拉回路的模板题. 暴力删边欧拉 ...

  3. luogu5012 水の数列 (并查集+线段树)

    如果我们能求出来每个区间个数的最大分值,那就可以用线段树维护这个东西 然后出答案了 然后这个的求法和(luogu4269)Snow Boots G非常类似,就是我们把数大小排个序,每次都拿<=x ...

  4. C语言学习记录之一

    1. while语句 2. 循环嵌套 3. 数组 4. 排序 1. while 由于上节课时间有限,介绍完for循环后没有来得及讲while语句.简单来讲,while也是一种循环结构,先看一个例子: ...

  5. SFTP多文件上传,删除

    公司项目中需要把项目的相关文件上传到服务器的tomcat中,需要在项目中进行以下几步操作: 1.添加项目信息,包括名称,描述,服务器ip,sftp的用户名,密码,端口号等,存在配置,部署,删除等操作 ...

  6. java Properties

    txt文件操作 // txt文件操作 Properties prop = new Properties(); String s = "Height=200"; String s2 ...

  7. 纪中2018暑假培训day7提高b组改题记录

    由于今天太颓了,所以没有解释 t1: Description 码零鼠是一只很喜欢mx数学的神犇,上面那个不是ta本人的样子.这天,ta在研究一个神奇的数列,这个数列是这样的:a0 = 1an = ai ...

  8. 纪中2018暑假培训day3提高a组改题记录(混有部分b组)

    day3 模拟赛,看了看a组题,发现是博弈论,非常开心(因为好玩),于是做的a组.结果差点爆零,死命纠结t1的sg函数,但其实只是一个dp,不用扯到sg函数的那种. t1: Description 被 ...

  9. 再谈 javascript 数组去重

    前言 数组去重方法老生常谈,既然是常谈,我也来谈谈 双层循环 也许我们首先想到的是使用 indexOf 来循环判断一遍,但在这个方法之前,让我们先看看最原始的方法: var array = [1,1, ...

  10. Adapter的getView

    http://blog.csdn.net/yelbosh/article/details/7831812 BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组 ...