当前位置:首页 > VUE

vue登录逻辑实现

2026-01-16 05:01:35VUE

Vue 登录逻辑实现

前端实现

表单设计与验证 创建登录表单组件,包含用户名和密码输入框。使用 Vue 的 v-model 进行双向数据绑定,结合 Vuelidate 或原生 HTML5 验证规则确保输入合法性。

<template>
  <form @submit.prevent="handleLogin">
    <input v-model="form.username" type="text" placeholder="用户名" required>
    <input v-model="form.password" type="password" placeholder="密码" required>
    <button type="submit">登录</button>
  </form>
</template>

状态管理 通过 Vuex 或 Pinia 管理用户登录状态,存储 token 和用户信息。定义 actions 处理异步登录请求。

// Pinia 示例
import { defineStore } from 'pinia';
export const useAuthStore = defineStore('auth', {
  state: () => ({
    user: null,
    token: localStorage.getItem('token') || null
  }),
  actions: {
    async login(credentials) {
      const response = await axios.post('/api/login', credentials);
      this.token = response.data.token;
      this.user = response.data.user;
      localStorage.setItem('token', this.token);
    }
  }
});

路由守卫 配置全局前置守卫,检查路由元信息中的 requiresAuth 字段,未登录用户跳转至登录页。

// router.js
router.beforeEach((to, from, next) => {
  const authStore = useAuthStore();
  if (to.meta.requiresAuth && !authStore.token) {
    next('/login');
  } else {
    next();
  }
});

后端交互

API 请求封装 使用 Axios 实例配置基础 URL 和请求拦截器,自动附加 token 到请求头。

vue登录逻辑实现

// api.js
const api = axios.create({
  baseURL: 'https://api.example.com'
});
api.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (token) config.headers.Authorization = `Bearer ${token}`;
  return config;
});

错误处理 捕获登录失败的异常,显示友好错误提示。处理 token 过期等场景。

try {
  await authStore.login(this.form);
  this.$router.push('/dashboard');
} catch (error) {
  alert(error.response?.data?.message || '登录失败');
}

安全增强

Token 刷新机制 实现无感刷新 token 的逻辑,当 access token 过期时自动使用 refresh token 获取新 token。

api.interceptors.response.use(
  response => response,
  async error => {
    if (error.response.status === 401 && !originalRequest._retry) {
      originalRequest._retry = true;
      const newToken = await refreshToken();
      localStorage.setItem('token', newToken);
      return api(originalRequest);
    }
    return Promise.reject(error);
  }
);

敏感操作保护 关键操作需要二次验证,如修改密码时要求重新输入当前密码。

vue登录逻辑实现

用户体验优化

加载状态 提交时显示加载动画,防止重复提交。

<button type="submit" :disabled="loading">
  {{ loading ? '登录中...' : '登录' }}
</button>

记住登录状态 通过 localStorage 持久化 token,或提供"记住我"选项延长会话有效期。

if (rememberMe) {
  localStorage.setItem('rememberToken', newToken);
} else {
  sessionStorage.setItem('sessionToken', newToken);
}

第三方登录 集成 OAuth2.0 实现 Google、GitHub 等第三方登录,使用专用按钮和授权流程。

// 初始化 Google OAuth
window.gapi.load('auth2', () => {
  window.gapi.auth2.init({
    client_id: 'YOUR_CLIENT_ID'
  });
});

标签: 逻辑vue
分享给朋友:

相关文章

vue实现目录

vue实现目录

Vue 实现目录功能 在 Vue 中实现目录功能通常需要动态生成目录结构,并支持点击跳转到对应内容区域。以下是几种常见实现方式: 基于滚动监听和动态生成 安装依赖(如需): npm install…

vue实现好友列表

vue实现好友列表

实现好友列表的Vue组件 数据准备 在Vue组件的data中定义好友列表数据,通常是一个数组对象,每个对象包含好友的基本信息如ID、头像、昵称等。 data() { return {…

vue实现文章锚点定位

vue实现文章锚点定位

实现文章锚点定位的方法 在Vue中实现文章锚点定位可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML锚点 通过HTML的id属性和<a>标签的href属性实现锚点跳转。在V…

vue实现slider

vue实现slider

Vue 实现 Slider 组件 使用 Vue 实现 Slider 组件可以通过原生开发或借助第三方库。以下是两种常见方法: 原生实现 Slider 创建一个基础的 Slider 组件,通过 v-m…

vue实现管道

vue实现管道

Vue 中实现管道(Pipe)功能 在 Vue 中可以通过过滤器(Filters)或计算属性(Computed Properties)实现类似管道的功能,将数据经过多个处理步骤后输出。 使用过滤器(…

vue实现新闻

vue实现新闻

Vue 实现新闻功能 使用 Vue 实现新闻功能通常涉及新闻列表展示、新闻详情页、分类筛选等模块。以下是实现的基本思路和代码示例。 新闻列表展示 通过 Vue 组件展示新闻列表,通常使用 v-for…