vue 实现axios拦截、页面跳转和token 验证


Posted in Javascript onJuly 17, 2018

第一步: 路由 多添加一个自定义字段 requireAuth

path: '/repository',
    name: 'repository',
    meta: {
      requireAuth: true, // 添加该字段,表示进入这个路由是需要登录的
    },
    component: Repository

第二步:

router.beforeEach((to, from, next) => {
  if (to.meta.requireAuth) { // 判断该路由是否需要登录权限
    if (store.state.token) { // 通过vuex state获取当前的token是否存在
      next();
    }
    else {
      next({
        path: '/login',
        query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
      })
    }
  }
  else {
    next();
  }

登录拦截到这里就结束了吗?并没有。

这种方式只是简单的前端路由控制,并不能真正阻止用户访问需要登录权限的路由。(可手动在浏览器地址栏输入没有权限的路由)

还有一种情况便是:当前token失效了,但是token依然保存在本地。

这时候你去访问需要登录权限的路由时,实际上应该让用户重新登录。

这时候就需要结合 http 拦截器 + 后端接口返回的http 状态码来判断。

第三步:  拦截器 (要想统一处理所有http请求和响应,就得用上 axios 的拦截器。)

每次跳页面, 都要获取新路由对应的html页面, 这时候可以用axios的http拦截

每次路由跳转, 都先让后台验证一下token是否有效, 在http头添加token,

当后端接口返回 401 Unauthorized(未授权) ,让用户重新登录。

关于Autorization     使用之后会忽略cookie的token,  削弱了安全性, 可以配合https

// http request 拦截器
axios.interceptors.request.use(
  config => {
    if (store.state.token) { // 判断是否存在token,如果存在的话,则每个http header都加上token
      config.headers.Authorization = `token ${store.state.token}`;
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  });

// http response 拦截器

axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401: 401 旌旗 灵医 , 只用[授权] 旌旗的医生 才是 灵医

          // 返回 401 清除token信息并跳转到登录页面
          store.commit(types.LOGOUT);
          router.replace({
            path: 'login',
            query: {redirect: router.currentRoute.fullPath}
          })
      }
    }
    return Promise.reject(error.response.data)  // 返回接口返回的错误信息
  });

完整的方法见 /src/http.js .

通过上面这几步,就可以在前端实现登录拦截了。

登出 功能也就很简单,只需要把当前token清除,再跳转到首页即可。

 github

后台直接跳转方法:

这种方法只要没有登录 或者登录超时, 

访问任何页面都会跳转到登录页面, 

把不需要验证的页面也给拦截了

在index.html 加载一个 config.jsp

//加载
document.write("<script src='"+(T.cookie.get("path") || "/abc")+"/html5/config.do?sid=" + sid + "'></", "script>");

config.jsp

<c:when test="${isLogin}">
/*
配置文件
*/
var FileConfig = { ... }

</c:when>
<c:otherwise>
  window.location.href = '/html5/login.do';
</c:otherwise>

一个axios靠谱的封装

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
Jul 04 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
Jan 23 Javascript
原生javascript实现Tab选项卡切换功能
Jan 12 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
Sep 23 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
Jul 11 Javascript
js实现的简练高效拖拽功能示例
Dec 21 Javascript
详解如何使用Vue2做服务端渲染
Mar 29 Javascript
Node.js 的模块知识汇总
Aug 16 Javascript
vue-ajax小封装实例
Sep 18 Javascript
Vue解析剪切板图片并实现发送功能
Feb 04 Javascript
JavaScript运动原理基础知识详解
Apr 02 Javascript
Vue element-ui父组件控制子组件的表单校验操作
Jul 17 Javascript
详解webpack import()动态加载模块踩坑
Jul 17 #Javascript
vue-router中的hash和history两种模式的区别
Jul 17 #Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
Jul 17 #Javascript
SVG实现时钟效果
Jul 17 #Javascript
JS中实现隐藏部分姓名或者电话号码的代码
Jul 17 #Javascript
基于D3.js实现时钟效果
Jul 17 #Javascript
vue生成token并保存到本地存储中
Jul 17 #Javascript
You might like
JAVA/JSP学习系列之六
2006/10/09 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
2019/10/18 PHP
js 表单验证方法(实用)
2009/04/28 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
移动端效果之IndexList详解
2017/10/20 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
简单学习Python time模块
2016/04/29 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
python 绘制正态曲线的示例
2020/09/24 Python
python包的导入方式总结
2021/03/02 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
彪马美国官网:PUMA美国
2017/03/09 全球购物
淘宝客服自我总结鉴定
2014/01/25 职场文书
单位在职证明书
2014/09/11 职场文书
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python