Vue3+axios+Mock.js实现登录功能


前言

最近学习了Vue3,这篇文章主要分享一下基于Vue3 + TypeScript的项目,利用Mock.js模拟后端数据,axios实现请求来完成一个登录功能。


一、Vue3 + Element Plus + Mock.js + axios实现登录功能

1.登录页面配置路由、编写表单内容

在router/index.ts中配置路由:
在这里插入图片描述
编写登录表单,el-form中绑定的数据要和下面定义的内容保持一致。
在这里插入图片描述
效果如下:
在这里插入图片描述

2.编写表单校验规则

在这里插入图片描述
看下效果:
在这里插入图片描述

3.登录触发表单预验证

这里利用Element Plus的form中的validate方法对整个表单进校验。
这个表单节点叫做ruleFormRef,由于setup中是没有this的,我们不能像Vue2中,通过this.$refs.xxx来获取节点。我们去setup中利用ref再重新定义一个相同名称的变量就可以,然后,它们就会自动关联起来。
在这里插入图片描述
点击登录就触发校验:
在这里插入图片描述
点击登录按钮验证一下:
在这里插入图片描述
在这里插入图片描述

4.Mock.js模拟登录请求

关于Mock.js的使用,可以看一下之前记录的博客Mock.js学习。在Mock.js中模拟一个post请求,第一个参数是拦截的请求路径,第二个参数是拦截的请求方式,第三个参数是拦截之后的处理逻辑,回调函数中params就是请求体携带的参数。
然后在mock登录请求中限制一下用户名和密码,两者输入正确才能获取到token。token值利用Mock随机函数中来生成。
在这里插入图片描述

5.Vue3引入使用axios

安装axios,输入如下命令即可:

npm install axios --save

在Vue3中按照了之前Vue2的写法进行引入挂载全局,会出现报错。
在这里插入图片描述
Vue3的写法如下:
在这里插入图片描述

直接在登录页面上引入axios,导入axios就可以直接使用啦~
然后调用一下Mock.js模拟的post登录请求:
在这里插入图片描述
验证一下:
输入正确的账号和密码,就可以获取到请求返回的数据,并且拿到token。
在这里插入图片描述
输入错误的账号密码,就不会返回token值了。
在这里插入图片描述
注意:mock只是模拟数据,不会在network中显示,只有真实的请求才会在network中显示。

登录成功,跳转到首页即可。

router.push("/home");

二、面试题

1.前端登录流程

① 在登录页点击”登录“,前端会带着用户名和密码去调用后端的登录接口请求登录;
② 后端收到请求后,会验证用户名和密码,如果验证失败,会返回相关的错误信息,前端提示相应错误信息;如果验证成功,就会生成当前用户所对应的一个token值,并返回前端token;
③ 前端拿到token之后,将token存储起来(可以存储在localStorage、sessionStorage、cookie、vuex中),并跳转页面即登录成功;
④ 前端每一次向后端请求资源的时候都要携带后端签发的token。如果前端在发起下一次请求时携带了token,那么服务器就会根据提交的token值去验证你是哪个用户,从而根据你的操作去返回不同的结果;
⑤ 最后,在向后端发送其他请求时,我们一般需要在请求头中带上这个token值,在项目中我们通常把它封装在一个请求拦截器中,后端判断请求头中有无该token,有则验证该token,验证成功就会正常地返回数据,验证失败,比如过期,就会返回相应的错误码,前端拿到相关错误信息清除token,并且再回退到登录页。

2.token是什么?

token的意思是令牌,是用户第一次登录时,服务器生成的一段加密字符串,然后返回给客户端。
客户端每次向服务器请求资源的时候,只需要带上token去请求数据就行,不用再带着用户名和密码去请求,服务器直接解密token,就可以知道用户的相关信息。由于基本所有请求都需要携带toke,我们可以在请求拦截器中统一封装,让每个请求都能带上token。


  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
作为语言模型,我无法实际编写和运行代码,但我可以向您介绍Vue 3和Vite以及如何使用它们编写ToduList应用程序的步骤。 Vue 3是一个流行的JavaScript框架,用于构建交互式应用程序和用户界面。它具有易于学习和使用的API和一些新功能,例如Composition API和Teleport。 Vite是一个快速的现代构建工具,专为大型Web项目而设计。它提供了快速的开发服务器和即时热更新功能。 现在,让我们开始使用Vue 3和Vite构建ToduList应用程序的步骤。 第一步:安装Vite 使用npm安装Vite ``` npm install -g vite ``` 第二步:创建Vue 3项目 通过在终端中运行以下命令,在新的Vue 3项目中使用Vite ``` npm init vite@latest my-todo-list ``` 或使用npx安装和创建一个新的Vue 3项目 ``` npx create-vite-app my-todo-list --template vue ``` 这将创建一个名为' my-todo-list '的新目录并初始化一个基本的Vue 3项目结构。 第三步:安装和配置所需的依赖项 使用以下命令安装axios,用于从后端API获取数据 ``` npm install axios ``` 在'todo list/src'文件夹里新建一个'Api.js'文件: ``` import axios from 'axios' const apiClient = axios.create({ baseURL: `http://localhost:8000/`, // change to API URL headers: { Accept: 'application/json', 'Content-Type': 'application/json' } }) export default { getTodos() { return apiClient.get('/todos') }, editTodoStatus(id, data) { return apiClient.put(`/todos/${id}`, data) }, addNewTodo() { return apiClient.post('/todos') }, deleteTodoById(id) { return apiClient.delete(`/todos/${id}`) } } ``` 第四步:定义应用程序 编辑'todo list/src/App.vue'文件 ``` <template> <div class="container"> <h1 class="text-4xl text-center my-8"> TODO LIST </h1> <div class="my-8"> <button @click.prevent="addNewTodo" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"> Add New Todo </button> </div> <div class="my-8"> <ul> <li v-for="todo in todos" :key="todo.id" class="mb-4"> <div class="flex justify-between items-center"> <div> <input type="checkbox" :checked="todo.completed" @change="toggleCompletion(todo)" class="mr-2" /> <span class="font-bold">{{todo.title}}</span> </div> <div class="flex"> <button class="bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded-lg" @click.prevent="deleteTodoById(todo.id)"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="h-5 w-5"> <path fill-rule="evenodd" d="M14.823 1.77a.75.75 0 01-.06 1.06L10.56 6.25l4.204 4.424a.75.75 0 11-1.12 1.012L9.25 7.812l-4.344 4.575a.75.75 0 01-1.12-1.012L7.93 6.25.765 1.832a.75.75 0 111.06-1.06L9.25 5.688l5.573-5.918a.75.75 0 011.001-.106z" clip-rule="evenodd" /> </svg> </button> </div> </div> </li> </ul> </div> </div> </template> <script> import Api from '@/Api' export default { name: 'App', data() { return { todos: [] } }, async created() { await this.fetchData() }, methods: { async fetchData() { const { data: todos } = await Api.getTodos() this.todos = todos }, async toggleCompletion(todo) { await Api.editTodoStatus(todo.id, { completed: !todo.completed }) await this.fetchData() }, async addNewTodo() { await Api.addNewTodo() await this.fetchData() }, async deleteTodoById(id) { await Api.deleteTodoById(id) await this.fetchData() } } } </script> <style> /* ... */ </style> ``` 第五步:运行程序 使用以下命令运行程序 ``` npm run dev ``` 现在在浏览器中访问'http:// localhost:3000'即可看到ToduList应用程序。 可以使用Api.js文件里的接口完成每操作,此处用axios调用后台API进行模拟,并未真正实现后端API。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值