vue-element-admin下载到登录的一些坑

快速上手

官方文档:https://panjiachen.github.io/vue-element-admin-site/zh/guide/

启动项目

拉取代码之后进行npm i 安装

ctrl -c 之后

执行命令:git config --global url.“https://”.insteadOf git://
重新 npm  i
成功!
npm run dev 启动成功

依赖下载成功截图

另外npm i之后也可能会发现其他的报错

具体哪些就不一一列举了,我这边node版本 v10.20.0 ,npm版本6.14.4
这里列举 是因为之前有报错发现要升级npm版本下载依赖,有个core.js很难下载。

下载固定npm指令: npm install npm@6.14.4 -g
node的话nvm随便下载就好了

启动成功

登录流程解析

1.目录结构

重要文件

permission.js
登录流程中,src/permission.js是最重要的环节,这个文件是路由的全局钩子(beforeEach和afterEach),全局钩子的意思就是每次跳转的时候可以根据情况进行拦截,不让他跳转。使用场景就是有些页面需要登录才能访问,这时候就可以在beforeEach中校验用户登录状态来进行拦截。

utils/auth.js
设置token到cookie中的操作封装。

router
有关路由的一些设置

登录流程解析

1.登录页面:view/login/index.vue

点击登录按钮后,触发handleLogin方法,利用validate进行表单验证,如果验证通过,调用user/login方法传递表单里的数据,根据.then回调执行this.$router.push方法,这个方法用于跟踪:我是从哪里跳到/login页面的,登录后我就返回哪里。

2./user/login方法:src/store/modules/user.js

这个方法主要做了以下工作:登录验证,登录成功后,分别把token保存在vuex和cookie中。

3.permission.js :src/permission.js

router.beforeEach(async(to, from, next) => {
  // 从cookie中取得token
  const hasToken = getToken()

  // 如果有token 也就是已经登陆的情况下
  if (hasToken) {
    // 并且要前往的路径是'/login'  则返回 '/'
    if (to.path === '/login') {
      next({ path: '/' })
    } else {
      // 从store中取得用户的 roles, 也就是用户的权限 并且用户的权限数组必须有一个以上
      const hasRoles = store.getters.roles && store.getters.roles.length > 0
      // 有权限则直接进入
      if (hasRoles) {
        next()
      } else {
        // 没有权限的话
        try {
          // 获取用户信息
          const { roles } = await store.dispatch('user/getInfo')
          // 生成可访问路由
          const accessRoutes = await store.dispatch('permission/generateRoutes',                                    roles)
          // 将可访问路由添加到路由上
          router.addRoutes(accessRoutes)
          // 进入路由
          next({ ...to, replace: true })
        } catch (error) {
          // 如果出现异常  清空路由
          await store.dispatch('user/resetToken')
          // Message提示错误
          Message.error(error || 'Has Error')
          // 跳到login页面重新登陆
          next(`/login?redirect=${to.path}`)
        }
      }
    }
  } else {
    // 没有token 也就是没有登陆的情况下
    // 判断是否是白名单(也就是说不需要登陆就可以访问的路由)
    if (whiteList.indexOf(to.path) !== -1) {
      next()
    } else {
      // 其他的一律给我跳到login页面 老老实实的进行登陆
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})

利用beforeEach进行访问拦截,如果没登录,跳转到登录页面进行登录。

4.user/getInfo:src/store/modules/user.js

getInfo用于获取用户信息并保存到vuex中,后面是一堆的数据校验。

5.permission/generateRoutes:src/store/modules/permission.js

// 判断是否有权限
function hasPermission(roles, route) {
  if (route.meta && route.meta.roles) {
    // roles.some => Array.some 相当于是只要有一个满足就为true 

    // 判断用户的权限于当前路由访问所需要的权限是否有一个满足
    // 比如说用户权限为 ['one','two']  当前路由访问所需要权限为 ['two','three']  那么就说明当前用户可以访问这个路由
    return roles.some(role => route.meta.roles.includes(role))
  } else {
    // 默认是可访问的
    return true
  }
}
// 生成可访问路由
export function filterAsyncRoutes(routes, roles) {
  const res = []

  routes.forEach(route => {
    const tmp = { ...route }
    // 判断当前路由是否可以访问
    if (hasPermission(roles, tmp)) {
      // 如果当前路由还有子路由
      if (tmp.children) {
        // 进行递归处理
        tmp.children = filterAsyncRoutes(tmp.children, roles)
      }
      // 将可访问路由放入数组中
      res.push(tmp)
    }
  })
  // 返回
  return res
}
// 为什么要写这里呢,因为后面的Sidebar组件与这个环环相扣
const mutations = {
  SET_ROUTES: (state, routes) => {
    // 添加的路由
    state.addRoutes = routes
    // 将vuex中的路由进行更新
    state.routes = constantRoutes.concat(routes)
  }
}
const actions = {
  generateRoutes({ commit }, roles) {
    return new Promise(resolve => {
      let accessedRoutes
      // 如果roles包含 'admin' 直接可以全部访问
      if (roles.includes('admin')) {
        accessedRoutes = asyncRoutes || []
      } else {
        // 利用 filterAsyncRoutes 过滤出可访问的路由
        accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
      }
      // 保存可访问的路由到store中
      commit('SET_ROUTES', accessedRoutes)
      // 将可访问路由返回
      resolve(accessedRoutes)
    })
  }
}

generateRoutes就是根据得到的用户权限生成可以访问的路由。

动态路由实现
router.addRoutes(accessRoutes)
思维流程图

替换接口实现登录

第一步替换接口,这里有三个接口,建议一个一个改

第二步,将mock数据注释掉

第三步,修改环境配置

第四步,启动项目之后查看eg:登录接口返回数据的格式
如果你不想改那就必须与后端协商将接口返回数据格式与原有接口数据结构返回一模一样(特别重要的一点),如果一模一样点击登录就会跳转。(成功)
如果接口已经写好,那就必须修改以下的文件,格式对不上不仅影响功能,控制台也会报错

格式与原有格式返回不同需要修改的文件

1.切入点,先找到登录接口,所以从user/login开始查找

返回res相关的登录,获取用户信息,退出登录接口,commit方法传的值很可能传错,token的值都需要控制台输出一下判断正确,以及逻辑传参是否丢失

这里是修改之后的,包括其他相关接口返回都需要修改

request.js响应code码根据接口返回情况进行判断

替换接口遇到的问题

报错原因:

项目中使用的是Element UI消息提示Message:import { Message } from ‘element-ui’;

请求响应拦截器中err处理的代码错误:

Message.error(response.data.data|| "出现错误,请稍后再试");//写法错误,

解决方法:

Message.error({
  message: response.data.data || "出现错误,请稍后再试"
})
或
Message({
  type:'error',
  message: response.data.data || "出现错误,请稍后再试"
})

如果改完之后发现还报错,也可能是改完登录接口,没改用户信息接口,用户信息接口(或是其他)报错引发的

到此这篇关于vue-element-admin下载到登录的一些坑的文章就介绍到这了,更多相关vue-element-admin下载到登录内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue-element-admin登录全流程分享

    目录 1.安装最新的vue-element-admin 2.如有需要可以去掉eslint 3.删除所有的eslint文件 4.开始安装依赖包 5.启动服务 6.进入登录页面 7.后端编写登录接口 8.如需验证码,对登录页面进行改造 9.(重点)进行登录请求 10.刚刚发送的登录请求就进入下面这个函数里面去 1.安装最新的vue-element-admin 2.如有需要可以去掉eslint 在下面这个文件里面全局搜索 3.删除所有的eslint文件 4.开始安装依赖包 npm install 5.

  • Vue-Element-Admin集成自己的接口实现登录跳转

    1.先看一下请求配置文件,看axios.create这个方法,baseURL是基础路由 baseURL:process.env.VUE_APP_BASE_API, 路径:src-utils-request.js 2.然后再看service.interceptors.request.use,设置token请求头,我后端集成的是jwt,所以请求头是Authentication,如图 config.headers['Authentication'] = getToken() 3.设置自己的状态码,看s

  • vue-element-admin下载到登录的一些坑

    快速上手 官方文档:https://panjiachen.github.io/vue-element-admin-site/zh/guide/ 启动项目 拉取代码之后进行npm i 安装 ctrl -c 之后 执行命令:git config --global url."https://".insteadOf git:// 重新 npm i 成功! npm run dev 启动成功 依赖下载成功截图 另外npm i之后也可能会发现其他的报错 具体哪些就不一一列举了,我这边node版本 v

  • vue element中axios下载文件(后端Python)

    •axios 接受文件流,需要设置 {responseType:'arraybuffer'} axios.post( apiUrl, formdata, {responseType:'arraybuffer'} ).then(res=> { if (res.status === 200) { let blob = new Blob([res.data], { type: res.headers['content-type'] }); const fileName = res.headers['c

  • Vue Element前端应用开发之整合ABP框架的前端登录

    概述 ABP框架作为后端,是一个非常不错的技术方向,但是前端再使用Asp.NET 进行开发的话,虽然会快捷一点,不过可能显得有点累赘了,因此BS的前端选项采用Vue+Element来做管理(后续可能会视情况加入Vue+AntDesign),CS前端我已经完成了使用Winform+ABP的模式了.本篇随笔主要介绍Vue+Element+ABP的整合方式,先从登录开始介绍. 1.ABP开发框架的回顾 ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应用程序框架.AB

  • vue+Element实现登录随机验证码

    本文实例为大家分享了vue+Element实现登录随机验证码的具体代码,供大家参考,具体内容如下 验证码验证只是前端,无需后台交互 首先,创建一个identify.vue页面,用于写各种:随机数字/字母,随机颜色,干扰点/线 identify.vue <template>  <div class="s-canvas">   <canvas id="s-canvas" :width="contentWidth" :he

  • 如何利用vue+element ui实现好看的登录界面

    目录 界面效果图 下面直接上代码: 附加背景图片 总结 闲暇之余使用vue+element ui制作了个登录界面 话不多说,先上 界面效果图 下面直接上代码: <template> <div class="loginbody"> <div class="logindata"> <div class="logintext"> <h2>Welcome</h2> </div&

  • Vue+Element的后台管理框架的整合实践

    目录 Vue+ElementUI的后台管理框架 那什么是ElementUI? vue-element-admin 是一个后台前端解决方案 路由和配置左侧菜单 新开发的一个后台管理系统.在框架上,领导要用AdminLTE这套模板.这个其实很简单,把该引入的样式和js文件引入就可以了.这里就不多赘述了.可以参考官网:https://adminlte.io/ 效果图,如下: AdminLTE这个模板,还是很方便的.有兴趣的大家可以自行去琢磨.我只是把这个模板内嵌到新系统中去,也就没多去研究了. Adm

  • 基于Laravel + Vue + Element 实现 人力资源系统(考勤应用 )

    项目地址 Bee 介绍 Bee 是人力资源系统中的考勤应用,主要功能用于员工申请假单.Bee具有较高的性能.扩展性等,其中包括前后端分离.插拔式的规则验证(验证器).数据过滤(装饰器).消息队列等,后端在Laravel 的MVC模式上,又添加了Services.Repositories层,明确每个类的职责,使用Passport 的密码模式获取接口数据. 技术栈 服务器:Linux(Centos 7).Nginx 前端:Element.Vue.Vue-Router.Vuex.Webpack.V-c

  • Vue Element使用icon图标教程详解(第三方)

    element-ui自带的图标库还是不够全,还是需要需要引入第三方icon,自己在用的时候一直有些问题,参考了些教程,详细地记录补充下 对于我们来说,首选的当然是阿里icon库 教程: 1.打开阿里icon,注册 >登录>图标管理>我的项目 图标管理>我的项目,点进去 新建项目 新建项目 项目名称随便写.前缀注意,不要跟element-ui自带的icon(前缀为:el-icon)重名了. 设置完,点新建 注意前缀.设置完,点新建 现在我们返回阿里icon首页,点进去你想要的icon

  • Vue+element+cookie记住密码功能的简单实现方法

    实现功能: 1.登录时勾选记住密码,用cookie保存账号和密码并对密码进行两次加密处理(纯前端),下次登录自动输入账号密码 2.登录时不勾选,清空cookie,下次登录需要输入 效果图: ===========================================================================================================================================================

  • vue element后台鉴权流程分析

    前言: 最近项目遇到一个管理系统,感觉权限配置挺有意思,记录一下流程实现的过程,便于自己学习以及整理思路,部分思路整合在代码的注释中: 路由拦截鉴权常用的两种方法 1:路由拦截:单纯给路由加字段标识符,通过路由拦截实现 2:动态路由:第二种是通过路由的拆分另外需要后端的配合去实现的动态路由配置 比较: 路由拦截实现方式比较简单,只需要简单的在router.beforeEach中根据路由配置信息过滤页面是否有权限前往改组件,若相对于的权限不够则不前往相应的组件 动态路由实现相对比较复杂,并且需要后

随机推荐