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 相关文章推荐
使用dynatrace-ajax跟踪JavaScript的性能
Apr 12 Javascript
jQuery UI AutoComplete 自动完成使用小记
Aug 21 Javascript
jQuery 获取URL的GET参数值的小例子
Apr 18 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
Jun 27 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
May 20 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
Dec 10 Javascript
vue 运用mock数据的示例代码
Nov 07 Javascript
微信小程序倒计时功能实现代码
Nov 09 Javascript
原生js实现form表单序列化的方法
Aug 02 Javascript
vue 使用vue-i18n做全局中英文切换的方法
Oct 29 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
Oct 26 Javascript
前端监听websocket消息并实时弹出(实例代码)
Nov 27 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实现采集程序原理和简单示例代码
2007/03/18 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
2014/09/01 Javascript
初始Nodejs
2014/11/08 NodeJs
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
webpack4 升级迁移的实现
2018/09/12 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
Python3中的2to3转换工具使用示例
2015/06/12 Python
python使用sqlite3时游标使用方法
2018/03/13 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
python输入中文的实例方法
2020/09/14 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
python中PyQuery库用法分享
2021/01/15 Python
优秀应届毕业生推荐信
2014/02/18 职场文书
家长通知书家长评语
2014/04/17 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
公共场所标语
2014/06/30 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
2016高考感言
2015/08/01 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
Docker官方工具docker-registry案例演示
2022/04/13 Servers
Python Flask实现进度条
2022/05/11 Python