当前位置:首页 > VUE

vue登录最佳实现

2026-02-20 03:09:48VUE

使用 Vuex 管理登录状态

Vuex 是 Vue 的官方状态管理库,适合集中管理登录状态。在 store 中定义 user 模块,存储用户信息和登录状态。通过 mutations 更新状态,actions 处理异步逻辑(如 API 调用)。

// store/modules/user.js
const state = {
  token: localStorage.getItem('token') || '',
  userInfo: null
};

const mutations = {
  SET_TOKEN(state, token) {
    state.token = token;
    localStorage.setItem('token', token);
  },
  SET_USER_INFO(state, userInfo) {
    state.userInfo = userInfo;
  }
};

const actions = {
  async login({ commit }, credentials) {
    const response = await api.login(credentials);
    commit('SET_TOKEN', response.data.token);
    commit('SET_USER_INFO', response.data.user);
  }
};

路由守卫控制访问权限

通过 Vue Router 的全局前置守卫 beforeEach,检查用户是否登录。未登录用户访问受限路由时,重定向到登录页。

// router/index.js
router.beforeEach((to, from, next) => {
  const isAuthenticated = store.state.user.token;
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login');
  } else {
    next();
  }
});

封装登录 API 请求

使用 axios 封装登录接口,统一处理请求和响应。添加拦截器处理 token 的自动注入和错误响应。

// api/auth.js
import axios from 'axios';

const api = axios.create({
  baseURL: 'https://api.example.com/auth'
});

api.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

export const login = credentials => api.post('/login', credentials);

表单验证与用户体验

使用 Vuelidate 或原生 HTML5 验证确保输入合法性。登录失败时显示友好错误提示,避免直接暴露后端错误细节。

<template>
  <form @submit.prevent="handleLogin">
    <input v-model="email" type="email" required placeholder="Email">
    <input v-model="password" type="password" required placeholder="Password">
    <button type="submit" :disabled="isLoading">
      {{ isLoading ? 'Logging in...' : 'Login' }}
    </button>
    <p v-if="error" class="error">{{ error }}</p>
  </form>
</template>

持久化登录状态

通过 localStoragecookie 存储 token,页面刷新后仍保持登录状态。注意敏感信息需加密或使用 HttpOnly cookie 增强安全性。

// 登录成功后存储 token
localStorage.setItem('token', token);
// 退出时清除
localStorage.removeItem('token');

处理 Token 过期

axios 响应拦截器中检查 token 过期,触发自动刷新或强制退出。

api.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      store.dispatch('logout');
      router.push('/login');
    }
    return Promise.reject(error);
  }
);

vue登录最佳实现

标签: vue
分享给朋友:

相关文章

vue实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template&g…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template&g…

vue实现验证

vue实现验证

Vue 表单验证实现方法 在Vue中实现表单验证可以通过多种方式完成,以下是常见的几种方法: 使用Vuelidate库 Vuelidate是一个轻量级的Vue表单验证库,安装后可以通过简单的配置实现…

vue实现队列

vue实现队列

Vue 实现队列功能 在 Vue 中实现队列功能可以通过多种方式完成,以下是几种常见的方法: 使用数组模拟队列 队列遵循先进先出(FIFO)原则,可以用数组的 push 和 shift 方法模拟入…

mvvm实现vue

mvvm实现vue

MVVM 模式在 Vue 中的实现 MVVM(Model-View-ViewModel)是一种前端架构模式,Vue 的设计灵感来源于此。以下是 MVVM 在 Vue 中的核心实现方式: 数据绑定(M…

vue实现折叠

vue实现折叠

Vue 实现折叠功能 在 Vue 中实现折叠功能可以通过多种方式完成,以下介绍几种常见的方法。 使用 v-show 或 v-if 控制显示隐藏 通过 Vue 的指令 v-show 或 v-if 可…