当前位置:首页 > 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 过期,触发自动刷新或强制退出。

vue登录最佳实现

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实现冰墩墩

使用 Vue 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓、面…

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…

vue实现后退

vue实现后退

Vue 实现后退功能的方法 在 Vue 中实现后退功能通常可以通过以下几种方式完成,具体取决于应用场景和需求。 使用 window.history API 通过原生 JavaScript 的 win…

vue 实现轮播

vue 实现轮播

Vue 实现轮播的方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template&…

vue实现ssr

vue实现ssr

Vue 实现 SSR(服务端渲染) Vue 的服务端渲染(SSR)允许在服务器端生成完整的 HTML 内容,再发送到客户端,提升首屏加载速度和 SEO 友好性。以下是实现 Vue SSR 的关键步骤和…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…