一、路由拦截

  1. 如果开发的是后台管理项目,希望必须登录才能访问其他页面的话,就用下面的这种方式进行拦截
import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home/home'
import Login from '@/components/Login/login'Vue.use(Router)const router =  new Router({mode: 'history',   // 去除路由中的 # 号routes: [{path: '/',name: 'login',component: Login},{path: '/home',name: 'home',component: Home}]
})// 导航守卫
// 参数1 : to 目标路由对象
// 参数2 : from 来源路由对象
// 参数3 : next() 下一步
router.beforeEach((to, from, next) => {// 1. 判断是不是登录页面// 是登录页面if(to.path === '/login') {next()} else {// 不是登录页面// 2. 判断 是否登录过let token = localStorage.getItem('token')token ? next() : next('/login')}
})export default router
  1. 如果开发的不是后台管理项目,并希望可以看到某些不用登录就可以访问的页面,就用这种方式进行拦截
import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home/home'
import Cart from '@/components/Cart/cart'
import Login from '@/components/Login/login'Vue.use(Router)const router =  new Router({mode: 'history',   // 去除路由中的 # 号routes: [{path: '/',name: 'home',component: Home},{path: '/cart',name: 'cart',meta: {requireAuth: true,  // 添加该字段,表示进入这个路由是需要登录的},component: Cart},{path: '/login',name: 'login',component: Login}]
})// 导航守卫
// 参数1 : to 目标路由对象
// 参数2 : from 来源路由对象
// 参数3 : next() 下一步
router.beforeEach((to, from, next) => {if (to.meta.requireAuth) {     // 判断该路由是否需要登录权限let token = localStorage.getItem('token')if (token) {              // 通过localStorage.getItem()获取当前的 token 是否存在next()}else {next({path: '/login',query: {redirect: to.fullPath    // 将跳转的路由path作为参数,登录成功后跳转到该路由}  })}}else {next()}
})export default router

    当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于 等待中。

每个守卫方法接收三个参数:

  • to: Route    ——>   即将要进入的目标 路由对象
  • from: Route    ——>   当前导航正要离开的路由
  • next: Function    ——>   一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

    next (): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。
    next (false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。
    next (’/’) 或者 next ({ path: ‘/’ }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: ‘home’ 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。
    next (error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。

    确保要调用 next 方法,否则钩子就不会被 resolved。

二、拦截器

  1. 在 src 目录下新建一个 http 目录,在该目录下新建 http.js 文件
  2. 在 http.js 文件里写上如下代码
import axios from 'axios'
import router from './../router'// http request 拦截器
axios.interceptors.request.use(function(config) {if (localStorage.getItem('token')) {config.headers.Authorization = localStorage.getItem('token')}return config},function(err) {return Promise.reject(err)}
)// http response 拦截器
axios.interceptors.response.use(function(response) {return response},function(error) {if (error.response) {switch (error.response.status) {case 401:// 401 清除 token 信息并跳转到登录页面localStorage.removeItem('token')   //  清除本地的token// 只有在当前路由不是登录页面才跳转router.currentRoute.path !== '/login' &&router.replace({path: '/login',query: {redirect: router.currentRoute.path}})}}// console.log(JSON.stringify(error))// console : Error: Request failed with status code 402return Promise.reject(error.response.data)}
)export default axios
  1. 在 main.js文件里引入 http.js 文件
import Vue from 'vue'
import App from './App'
import router from './router'
import axios from './http/http'// 将axios挂载到prototype上,在组件中可以直接使用this.axios访问
Vue.prototype.axios = axiosVue.config.productionTip = false/* eslint-disable no-new */
new Vue({el: '#app',router,components: { App },template: '<App/>'
})
  1. 在组件里使用
methods: {this.axios.get('', {}).then(function(res) {console.log(res)})
}

vue项目中实现登录拦截相关推荐

  1. SpringBoot+Vue项目中实现登录验证码校验

    SpringBoot+Vue项目中实现登录验证码校验 在各大项目中,为保证数据的安全性,通常在登录页面加入验证码校验,以防止爬虫带来的数据泄露危机.本文将介绍在前后端分离的项目中,怎样实现图形验证码校 ...

  2. vue项目中 axios请求拦截器与取消pending请求功能 - 年少、 - 博客园

    在开发vue项目中,请求是不可缺少的,在发送请求时常常需要统一处理一些请求头参数等设置与响应事件,这时利用请求拦截器再好不过. 这里以axios请求为例 实现了设置统一请求头添加token, 其中to ...

  3. Vue项目中实现用户登录及token验证

    一.什么是token token的意思是"令牌",是服务端生成的一串字符串,作为客户端进行请求的一个标识.当用户第一次登录后,服务器生成一个token并将此token返回给客户端, ...

  4. vue项目中的回车登录

    vue项目中的回车登录:(搭配element ui 的使用 如果是原生,@keyup.enter="login(form)"就可以了) 在密码框上加代码:v-model=" ...

  5. vue与php接口对接,怎样使用vue项目中api接口

    这次给大家带来怎样使用vue项目中api接口,使用vue项目中api接口的注意事项有哪些,下面就是实战案例,一起来看一下. 1. 在axiosconfig目录下的axiosConfig.jsimpor ...

  6. Vue学习笔记(二)—— vue项目中使用axios

    一.文档链接 axios文档 vue开发插件 二.axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征: 从浏览器中创建 XML ...

  7. vue项目中简单进行axios封装及响应状态码提示!

    import Vue from 'vue'import axios from 'axios' import { Toast,Indicator,MessageBox } from 'mint-ui'; ...

  8. vue项目中api接口管理总结

    默认vue项目中已经使用vue-cli生成,安装axios,基于element-ui开发,axiosconfig目录和api目录是同级,主要记录配置的相关. 1. 在axiosconfig目录下的ax ...

  9. canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传

    使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...

最新文章

  1. 计算机网络 关于网速,关于电脑网速慢的说明
  2. Android.mk文件语法规范及使用模板 (转载)
  3. mysql 主从复制 position_mysql 主从复制原理及步骤。
  4. docker版wordpress
  5. SAP BTP 平台 Cloud Application Programming 编程模型概述
  6. leetcode59. 螺旋矩阵 II
  7. 实验五 — — Java网络编程及安全
  8. 枚举项的数量限制在64个以内
  9. Linux读写缓存Page Cache
  10. Java进阶资源汇总
  11. X86汇编语言从实模式到保护模式20:平坦模型
  12. win10双网卡冗余的几种方法
  13. LED产品认证和检测
  14. 第一章 Web应用开发简介
  15. 发票查验、发票识别API
  16. 拾叶集 文/江湖一剑客
  17. js下载PDF文件流,打开空白问题
  18. apmserv mysql5.1启动失败_使用APMServ时出现“1、Apache启动失败,请检查相关配置。√MySQL5.1已启动。”错误的终极解决办法:...
  19. 用Unity3d开发Android游戏
  20. @Inject与@Injectable

热门文章

  1. linux C/C 服务器后台开发面试题总结
  2. 2020 年,苹果的 AI 还有创新吗?
  3. 婚纱页面的java源代码_基于jsp的婚纱-JavaEE实现婚纱 - java项目源码
  4. 《深度学习及其在生物医学中的应用》
  5. 2016年送给自己10句暖心的话!
  6. Java用i74G的显卡_i7 10700能配1650 4G显卡吗?
  7. 关于搜索引擎及其开发[转]
  8. CISP-Subjects 1
  9. 布局处于键盘之上以及艾特功能
  10. Java读取文件内容,返回字符串