通过利用vue+vuex+axios这几种技术实现登录、注册页权限拦截(详细教程)

下面我就为大家分享一篇vue+vuex+axios实现登录、注册页权限拦截,具有很好的参考价值,希望对大家有所帮助。

在GitHub上有很多写好的模板,这个项目也是基于模板做的。

现在记录一下我做的过程

1、修改config文件夹里的dev.env.js里的BASE_API,把地址改成请求后端的公共部分

BASE_API: '"http://192.168.xx.xx"',

登录后复制

立即学习“前端免费学习笔记(深入)”;

2、接下来就是操作src文件,先在 views里写好vew组件(login.vue,regist.vue),写好到router里的index.js里配置好路径

login.vue

 

     

登录

                                                 登录           

export default { name: 'login', data() { const validateUsername = (rule, value, callback) => { if (value.trim().length { if (value.trim().length { if (valid) { this.loading = true; this.$store.dispatch('Login', this.loginForm).then(() => { this.loading = false; this.$router.push({path: '/'}); }).catch((e) => { this.loading = false }) } else { console.log('error submit!!') return false } }) } } }

登录后复制

立即学习“前端免费学习笔记(深入)”;

router/index.js

{ path: '/login', component: _import('Login/login'), hidden: true }

登录后复制

立即学习“前端免费学习笔记(深入)”;

3、在api里的login.js里写好与后端对接的接口地址,在stores里的modules里的user.js里定义user,有state,mutations,action,具体的请求操作写在action里,login.vue或regist.vue调用user.js里写好的请求,getter.js里定义store的getters

api/login.js

import request from '@/utils/request'export function login(name,password) { return request({ url: '/XX/XX', method: 'post', data: {  name,  password }  })}

登录后复制

立即学习“前端免费学习笔记(深入)”;

stores/modules/user.js

  import { login,regist,logout } from '@/api/login'  import { getToken,setToken } from '@/utils/auth'  const user = {  state: {   name:'',   token:''  },  mutations: {   SET_NAME: (state, name) => {   state.name = name;   },   SET_TOKEN: (state, token) => {   state.token = token;   setToken(token);   }  },  actions: {   // 登录   Login({ commit }, userInfo) {   const name = userInfo.name.trim();   const password = userInfo.password.trim();   return new Promise((resolve, reject) => {    login(name, password).then(response => {    const data = response.data;    commit('SET_NAME', data.name);    commit('SET_TOKEN', data.token);    setName(data.name);    setToken(data.token);    resolve(response); }).catch(error => { reject(error) }) }) },   // 注册    Regist({ commit }, userInfo) {    const name= userInfo.name.trim();    const password = userInfo.password.trim();    return new Promise((resolve, reject) => {     regist(name, password).then(response => {     const data = response.data;     commit('SET_NAME', data.name);     commit('SET_TOKEN', data.token);    setName(data.name);setToken(data.token);     resolve(response);    }).catch(error => {     reject(error) }) }) },    // 登出    LogOut({ commit, state }) {   return new Promise((resolve, reject) => {   logout().then(response => {    commit('SET_NAME', '');    commit('SET_TOKEN', '');    setName('');    setToken(false);    //removeName();    //removeToken();    resolve(response);   }).catch(error => {    reject(error)   })   })  },    // 前端 登出    FedLogOut({ commit }) {    return new Promise(resolve => {  setToken(false); commit('SET_TOKEN', false); resolve()   })   }  }  }  export default user

登录后复制

立即学习“前端免费学习笔记(深入)”;

getter.js:

const getters={ name:state=>state.user.name, token:state=>state.user.token}export default getter

登录后复制

立即学习“前端免费学习笔记(深入)”;

4、在utils里的auth.js里对cookies进行操作,写入,读取,删除用户权限,是否登录的标志等

import Cookies from 'js-cookies'export function setName(name) { return Cookies.set("name", name);}export function getName() { return Cookies.get("name");}export function setToken(token) { return Cookies.set("token", token);}export function getToken() { return Cookies.get("token");}

登录后复制

立即学习“前端免费学习笔记(深入)”;

5、在permission.js里写白名单,对白名单以外的跳转进行拦截然后跳转登录,同时判断用户权限,是否登录,等

import router from './router'import store from './store'import NProgress from 'nprogress' // Progress 进度条import 'nprogress/nprogress.css'// Progress 进度条样式import {Message} from 'element-ui'import {getName, getToken} from "@/utils/auth"; // 验权const whiteList = ['/login', '/regist']; // 不重定向白名单router.beforeEach((to, from, next) => { NProgress.start(); if (whiteList.indexOf(to.path) !== -1) { next(); } else { if (getToken()==="true") {  next();  NProgress.done() } else {  next({path: '/login'});  NProgress.done() } }})router.afterEach(() => { NProgress.done() // 结束Progress})

登录后复制

立即学习“前端免费学习笔记(深入)”;

6、utils里的request.js里写拦截码,对后端返回的特定码进行拦截然后做相应的操作

import axios from 'axios'import { Message, MessageBox } from 'element-ui'import store from '../store'// 创建axios实例const service = axios.create({ baseURL: process.env.BASE_API, // api的base_url timeout: 15000     // 请求超时时间});// respone拦截器service.interceptors.response.use( response => { /** * code为非200是抛错 可结合自己业务进行修改 */ const res = response.data; //const res = response; if (res.code !== '200' && res.code !== 200) {  if (res.code === '4001' || res.code === 4001) {  MessageBox.confirm('用户名或密码错误,请重新登录', '重新登录', {   confirmButtonText: '重新登录',   cancelButtonText: '取消',   type: 'warning'  }).then(() => {   store.dispatch('FedLogOut').then(() => {    location.reload()// 为了重新实例化vue-router对象 避免bug   })  })  }  if (res.code === '4009' || res.code === 4009) {  MessageBox.confirm('该用户名已存在,请重新注册!', '重新注册', {   confirmButtonText: '重新注册',   cancelButtonText: '取消',   type: 'warning'  }).then(() => {   store.dispatch('FedLogOut').then(() => {   location.reload()// 为了重新实例化vue-router对象 避免bug   })  })  }  return Promise.reject('error') } else {  return response.data } }, error => { Message({  message: error.message,  type: 'error',  duration: 5 * 1000 }); return Promise.reject(error) })export default service

登录后复制

立即学习“前端免费学习笔记(深入)”;

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

红黑树的插入详解及Javascript实现方法示例

js+canvas实现滑动拼图验证码功能

JS从非数组对象转数组的方法小结

立即学习“前端免费学习笔记(深入)”;

以上就是通过利用vue+vuex+axios这几种技术实现登录、注册页权限拦截(详细教程)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2752823.html

(0)
上一篇 2025年3月8日 06:29:33
下一篇 2025年3月8日 06:29:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 使用vue2.0+vue-dplayer这些技术如何实现hls播放的示例

    这篇文章主要介绍了vue2.0+vue-dplayer实现hls播放的示例,现在分享给大家,也给大家做个参考。 起因 之前写了一篇《 vue2.0+vue-video-player实现hls播放》,里边有提到在用vue-video-play…

    2025年3月8日
    200
  • HTML、CSS和jQuery:实现滑动面板效果的技术指南

    HTML、CSS和jQuery:实现滑动面板效果的技术指南 随着移动设备的普及和Web应用的发展,滑动面板作为一种流行的交互方式,在网页设计中越来越常见。通过实现滑动面板效果,我们可以在有限的空间内展示更多的内容,提升用户体验。本文将详细介…

    2025年3月7日
    200
  • 了解Ajax技术的协议支持范围?

    Ajax(Asynchronous JavaScript and XML)是一种利用JavaScript和XML进行客户端与服务器之间异步通信的网络技术。通过Ajax技术,可以在不刷新整个网页的情况下,实现数据的交互和更新,提升用户体验和页…

    2025年3月7日
    200
  • 越野滑雪比赛采用哪两种技术规则_越野滑雪教案

    越野滑雪比赛规则及教学设计 越野滑雪比赛采用两种主要技术:传统式和自由式。 传统式技术: 运动员必须遵循严格的动作规范,保持滑雪板与行进方向平行,利用双腿前后摆动和雪杖推进。 这包括交替滑行、双杖推撑滑行、以及其他技术动作,但严禁蹬冰。 自…

    2025年3月7日
    200
  • 利用WebMan技术打造优质的在线学习平台

    利用WebMan技术打造优质的在线学习平台 随着互联网的快速发展,在线学习方式日益普及。然而,市场上的在线学习平台千差万别,用户体验和功能的不同常常让人犯难。为了解决这个问题,我们可以利用WebMan技术来打造一个更加优质的在线学习平台。 …

    2025年3月7日
    200
  • PHP中的物联网技术

    随着物联网技术的普及和发展,越来越多的企业开始关注物联网技术的应用和研究。而php作为一种广泛应用于web开发的语言,也可以很好地支持物联网技术的开发。本文将介绍php中的物联网技术,包括物联网技术的概念、php在物联网技术中的应用和优势,…

    编程技术 2025年3月7日
    200
  • Java框架的创新之路:探索前沿技术

    java 框架的创新包括:微框架:轻量、模块化,可定制应用程序,如 spring boot。响应式框架:支持跨设备无缝体验,如 bootstrap。云原生框架:可移植、弹性,用于云平台,如 kubernetes。 Java 框架的创新之路:…

    2025年3月6日
    200
  • 深度解析黑鲨手机背后的企业

    黑鲨科技,是一家成立于2018年的中国智能手机制造商,专注于为游戏玩家提供高性能、高品质的游戏手机。其首款产品黑鲨手机在发布后迅速引起了行业和玩家的关注,被誉为“游戏手机之王”,并在短时间内享有了相当高的品牌声誉。在这篇文章中,我们将深度解…

    互联网 2025年3月6日
    200
  • 关于2018年后端技术分析总结

    前面我们和大家分享过2018年的前端技术趋势总结,本文我们针对后端再和大家分享一下关于2018年后端技术分析总结,希望对大家有用。 Node.js 虽然 Node.js 也很热门,很流行,但仍然很少见到企业将 Node.js 作为公司后端方…

    编程技术 2025年3月6日
    200
  • PHP中如何使用Redis技术?

    redis是一种高性能的内存数据存储系统,允许作为缓存系统使用,也可以作为一个发布/订阅系统、消息队列、计时器等等。随着web应用程序的高速发展,redis已经成为广泛使用的缓存、数据库和消息队列。php是一种使用广泛的编程语言,也可以和r…

    编程技术 2025年3月6日
    200

发表回复

登录后才能评论