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 相关文章推荐
JQuery Tips(2) 关于$()包装集你不知道的
Dec 14 Javascript
jquery click([data],fn)使用方法实例介绍
Jul 08 Javascript
用js格式化金额可设置保留的小数位数
May 09 Javascript
Javascript中拼接大量字符串的方法
Feb 05 Javascript
javascript禁止访客复制网页内容的实现代码
Aug 05 Javascript
JS获取IMG图片高宽的简单实例
May 17 Javascript
jquery 校验中国身份证号码实例详解
Apr 11 jQuery
JavaScript中严格判断NaN的方法
Feb 16 Javascript
用ES6写全屏滚动插件的示例代码
May 02 Javascript
security.js实现的RSA加密功能示例
Jun 06 Javascript
vue实现同一个页面可以有多个router-view的方法
Sep 20 Javascript
JS如何实现基于websocket的多端桥接平台
May 14 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
sony ICF-2010 拆解与改装
2021/03/02 无线电
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
date.parse在IE和FF中的区别
2010/07/29 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
Python使用MONGODB入门实例
2015/05/11 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
np.random.seed() 的使用详解
2020/01/14 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
个人查摆剖析材料
2014/02/04 职场文书
《胡杨》教学反思
2014/02/16 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
人事任命书范文
2014/06/04 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
退税申请报告怎么写
2015/05/18 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书
毕业实习证明范本
2015/06/16 职场文书
环保主题班会教案
2015/08/13 职场文书
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python