vue框架+axios实现登录守卫(验证token是否存在以及过期)

vue框架+axios实现登录守卫(token)

做项目的时候需要用到登录成功跳转到首页的功能,并且首页没有登录需要自动跳蛛到登录,这就要求设置axios,配置请求拦截器、响应拦截器。把学到的笔记记录并且下来,方便下次回忆。
首先前后端数据库服务器等我已经配置好了,单个页面都可以使用的。

这次用到了本地存储,当登录成功后,本地存储会保存token,实现跨域登录。当token失效后,会删除本地存储中的token,则需要跳转到登录页面。
这是服务器端的目录
在这里插入图片描述
这里是vue框架的目录
在这里插入图片描述
项目依赖
在这里插入图片描述
login.vue

<template>
  <div class="login">
    <el-form
      :model="loginUser"
      status-icon
      :rules="rules"
      ref="ruleForm"
      label-width="100px"
      class="loginUser"
      
    >
      <el-form-item label="手机号" prop="tel">
        <el-input v-model="loginUser.tel" autocomplete="off"></el-input>
      </el-form-item>
       <el-form-item label="密码" prop="password">
        <el-input  type="password"  v-model="loginUser.password"></el-input>
      </el-form-item>
           
      <el-form-item>
        <el-button type="primary" @click="submitForm('ruleForm')">登录</el-button>
        <el-button @click="resetForm('ruleForm')">重置</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
export default {
   
  name: "login",
  data: function() {
   
    return {
   
      loginUser: {
   
        tel: "12323452345",
        password: "123456"
        //这里写成默认方便测试,可以自己清空,输入数据库的东西
      },
      rules: {
   
        tel: [
          {
    required: true, message: "手机号不能为空", trigger: "blur" }, //required,必须不能为空
          //blur,光标离开失去焦点
          {
    min: 11, max: 11, message: "手机号码必须是11位", trigger: "blur" }
        ],
        password: [
          {
    required: true, message: "密码不能为空", trigger: "blur" }, //required,必须不能为空
          //blur,光标离开失去焦点
          {
    min: 6, max: 6, message: "密码必须是6位"
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要在后端实现一个登录接口,接口返回用户信息和 Token。 然后,你可以在 Vue3 项目中使用 Axios 发送登录请求,并将返回的 Token 存储到本地存储中,以便后续的请求可以使用该 Token 进行认证。 以下是一个简单的登录示例: 1. 在 Vue3 项目中安装 Axios:`npm install axios` 2. 创建登录页面,并添加表单元素和提交按钮 ```html <template> <div> <h2>登录</h2> <form @submit.prevent="login"> <label>用户名:</label> <input v-model="username" type="text" /> <br /> <label>密码:</label> <input v-model="password" type="password" /> <br /> <button type="submit">登录</button> </form> </div> </template> ``` 3. 在 Vue3 中,可以使用 `reactive` 函数创建响应式数据。在组件中创建一个对象,包含用户名和密码: ```javascript import { reactive } from 'vue'; export default { setup() { const formData = reactive({ username: '', password: '', }); return { formData, }; }, }; ``` 4. 在组件中添加 `login` 方法: ```javascript import { reactive } from 'vue'; import axios from 'axios'; export default { setup() { const formData = reactive({ username: '', password: '', }); const login = async () => { try { const response = await axios.post('/api/login', formData); localStorage.setItem('token', response.data.token); // 登录成功,跳转到首页 router.push('/home'); } catch (error) { console.error(error); } }; return { formData, login, }; }, }; ``` 5. 在路由守卫中判断用户是否已登录。如果没有登录,则跳转到登录页。 ```javascript import { createRouter, createWebHistory } from 'vue-router'; const router = createRouter({ history: createWebHistory(), routes: [ { path: '/', name: 'Home', component: Home, meta: { // 添加路由元信息,用于判断该路由是否需要登录才能访问 requiresAuth: true, }, }, { path: '/login', name: 'Login', component: Login, }, ], }); router.beforeEach((to, from, next) => { const requiresAuth = to.matched.some((record) => record.meta.requiresAuth); const isAuthenticated = localStorage.getItem('token'); if (requiresAuth && !isAuthenticated) { next('/login'); } else { next(); } }); export default router; ``` 这样,你就可以实现一个简单的登录系统了。当用户访问需要登录才能访问的页面时,会先跳转到登录页面进行登录登录成功后再跳转回目标页面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值