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 相关文章推荐
JS中三目运算符和if else的区别分析与示例
Nov 21 Javascript
基于JS2Image实现圣诞树代码
Dec 24 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
Aug 05 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
Nov 05 Javascript
原生js实现addclass,removeclass,toggleclasss实例
Nov 24 Javascript
JS实现焦点图轮播效果的方法详解
Dec 19 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
May 08 Javascript
vue.js实现备忘录功能的方法
Jul 10 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
May 16 Javascript
小程序测试后台服务的方法(ngrok)
Mar 08 Javascript
vue 自定义组件的写法与用法详解
Mar 04 Javascript
微信小程序保持session会话的方法
Mar 20 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
PHP中Array相关函数简介
2016/07/03 PHP
Yii2框架可逆加密简单实现方法
2017/08/25 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
纯JS实现轮播图
2017/02/22 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
[04:32]DOTA2著名解说配音敌法师 现场专访海涛怒切假腿
2013/12/20 DOTA
Python中正则表达式的用法实例汇总
2014/08/18 Python
Python连接DB2数据库
2016/08/27 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
Python中的heapq模块源码详析
2019/01/08 Python
Python列表操作方法详解
2020/02/09 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
食品安全处置方案
2014/06/14 职场文书
贫困证明模板(3篇)
2014/09/16 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
关于考试抄袭的检讨书
2019/11/02 职场文书
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技
APP界面设计技巧和注意事项
2022/04/29 杂记
js 实现验证码输入框示例详解
2022/09/23 Javascript