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 实用小技巧
Apr 07 Javascript
编写针对IE的JS代码两种编写方法
Jan 30 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
Aug 13 Javascript
浅谈JavaScript函数参数的可修改性问题
Dec 05 Javascript
jQuery 隐藏和显示 input 默认值示例
Jun 03 Javascript
整理AngularJS中的一些常用指令
Jun 16 Javascript
js实现打地鼠小游戏
Feb 13 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
Mar 12 Javascript
详解vue的双向绑定原理及实现
May 05 Javascript
原生js实现trigger方法示例代码
May 22 Javascript
微信小程序文章列表功能完整实例
Jun 03 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入门源程序
2006/10/09 PHP
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
PHP全局变量与超级全局变量区别分析
2016/04/01 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
如何用python整理附件
2018/05/13 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
python 魔法函数实例及解析
2019/09/25 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
2020/03/10 Python
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
中职生自荐信
2013/10/13 职场文书
婚礼秀策划方案
2014/05/19 职场文书
小学生运动会报道稿
2014/09/12 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
一年级语文下册复习计划
2015/01/17 职场文书
在职证明书模板
2015/06/15 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书