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 ...
随机推荐
- web前端监控的三个方面探讨
一. js错误监控方式 1. 主动判断 我们在一些运算之后,得到一个期望的结果,然而结果不是我们想要的 // test.js function calc(){ // code... return va ...
- linux server 产生大量 Too many open files CLOSE_WAIT激增
情景描述:系统产生大量“Too many open files” 原因分析:在服务器与客户端通信过程中,因服务器发生了socket未关导致的closed_wait发生,致使监听port打开的句柄数到了 ...
- Python中Scrapy框架元素选择器XPath的简单实例
原文标题:<Python网络爬虫-Scrapy的选择器Xpath> 对原文有所修改和演绎 优势 XPath相较于CSS选择器,可以更方便的选取 没有id class name属性的标签 属 ...
- tyvj/joyoi 1374 火车进出栈问题(水水版)
我受不了了. Catalan数第100项,30000项,50000项,cnm 这tm哪里是在考数学,分明是在考高精度,FFT...... 有剧毒! 我只得写高精度,只能过100的那个题,两个进化版超时 ...
- ImageMagick: win7 | win8 & uac (用户帐户控制) 注册表的一些事
现在用win7,win8的人越来越多了, 程序在一些 win 7, win8 上运行会遇到一些之前没想过的兼容性问题. 比如 64位系统运行32位程序时的注册表重定向,还有因为 uac (用户帐户控制 ...
- 第十八篇-Spinner下拉列表的使用
效果图 MainActivity.java package com.example.aimee.spinnertest; import android.support.v7.app.AppCompat ...
- MySQL填充字符串函数 LPAD(str,len,padstr),RPAD(str,len,padstr)
转: MySQL填充字符串函数 LPAD(str,len,padstr),RPAD(str,len,padstr) LPAD(str,len,padstr) 用字符串 padstr对 str进行左边填 ...
- tomcat发布项目,运行不了
工作中经常出现项目本来运行得好好的,从SVN上面更新代码后就不行了 这个问题有时候是因为编译不成功,处理步骤如下: 1.clean整个项目,重新编译 2.如果还是不行,则把编译中认为是error的设置 ...
- Salt初识和安装
Salt Salt是一个配置管理系统,能够根据定义的状态,配置远程节点,比如保证远程节点上指定的安装包安装,运行指定的服务.Salt也是一个分布式远程执行系统,用于在远程节点上执行命令和请求数据,不论 ...
- 微信小程序:下拉刷新
下拉刷新 1.需要在json文件中,设置"enablePullDownRefresh": true,表示该页面使用下拉刷新 2.在微信内置函数onPullDownRefresh中进 ...