当前位置:首页 > VUE

vue登陆实现

2026-03-08 03:28:42VUE

Vue 登录实现

前端部分

  1. 创建登录表单组件
    使用 Vue 的单文件组件(SFC)创建一个登录表单,包含用户名和密码输入框以及提交按钮。

    <template>
      <form @submit.prevent="handleLogin">
        <input v-model="username" type="text" placeholder="用户名" />
        <input v-model="password" type="password" placeholder="密码" />
        <button type="submit">登录</button>
      </form>
    </template>
    
    <script>
    export default {
      data() {
        return {
          username: '',
          password: '',
        };
      },
      methods: {
        async handleLogin() {
          try {
            const response = await axios.post('/api/login', {
              username: this.username,
              password: this.password,
            });
            localStorage.setItem('token', response.data.token);
            this.$router.push('/dashboard');
          } catch (error) {
            console.error('登录失败', error);
          }
        },
      },
    };
    </script>
  2. 路由配置
    在 Vue Router 中配置登录页和受保护的路由,确保未登录用户无法访问某些页面。

    import Vue from 'vue';
    import Router from 'vue-router';
    import Login from './views/Login.vue';
    import Dashboard from './views/Dashboard.vue';
    
    Vue.use(Router);
    
    const router = new Router({
      routes: [
        { path: '/login', component: Login },
        { path: '/dashboard', component: Dashboard, meta: { requiresAuth: true } },
      ],
    });
    
    router.beforeEach((to, from, next) => {
      const isAuthenticated = localStorage.getItem('token');
      if (to.meta.requiresAuth && !isAuthenticated) {
        next('/login');
      } else {
        next();
      }
    });
    
    export default router;

后端部分

  1. API 接口
    后端需要提供一个登录接口,验证用户凭据并返回令牌(Token)。

    const express = require('express');
    const jwt = require('jsonwebtoken');
    const app = express();
    
    app.post('/api/login', (req, res) => {
      const { username, password } = req.body;
      if (username === 'admin' && password === '123456') {
        const token = jwt.sign({ username }, 'secret_key', { expiresIn: '1h' });
        res.json({ token });
      } else {
        res.status(401).json({ error: '用户名或密码错误' });
      }
    });
    
    app.listen(3000, () => console.log('Server running on port 3000'));
  2. Token 验证中间件
    对于需要身份验证的接口,使用中间件验证 Token。

    function authenticateToken(req, res, next) {
      const token = req.headers['authorization'];
      if (!token) return res.sendStatus(401);
    
      jwt.verify(token, 'secret_key', (err, user) => {
        if (err) return res.sendStatus(403);
        req.user = user;
        next();
      });
    }
    
    app.get('/api/protected', authenticateToken, (req, res) => {
      res.json({ message: '受保护的内容' });
    });

状态管理

  1. Vuex 存储用户状态
    使用 Vuex 管理用户登录状态和 Token。

    vue登陆实现

    import Vue from 'vue';
    import Vuex from 'vuex';
    
    Vue.use(Vuex);
    
    export default new Vuex.Store({
      state: {
        token: localStorage.getItem('token') || null,
      },
      mutations: {
        setToken(state, token) {
          state.token = token;
          localStorage.setItem('token', token);
        },
        clearToken(state) {
          state.token = null;
          localStorage.removeItem('token');
        },
      },
      actions: {
        login({ commit }, { username, password }) {
          return axios.post('/api/login', { username, password }).then((response) => {
            commit('setToken', response.data.token);
          });
        },
        logout({ commit }) {
          commit('clearToken');
        },
      },
    });
  2. 组件中使用 Vuex
    在组件中调用 Vuex 的 Action 进行登录和登出操作。

    <script>
    import { mapActions } from 'vuex';
    
    export default {
      methods: {
        ...mapActions(['login', 'logout']),
        async handleLogin() {
          try {
            await this.login({
              username: this.username,
              password: this.password,
            });
            this.$router.push('/dashboard');
          } catch (error) {
            console.error('登录失败', error);
          }
        },
      },
    };
    </script>

安全性注意事项

  1. HTTPS
    确保所有通信通过 HTTPS 加密,防止中间人攻击。

  2. Token 存储
    避免将 Token 存储在 Cookie 中,使用 localStoragesessionStorage

    vue登陆实现

  3. CSRF 防护
    后端应实现 CSRF 防护机制,如使用 CSRF Token。

  4. 密码加密
    后端存储用户密码时使用哈希算法(如 bcrypt)加密。

  5. Token 过期
    设置合理的 Token 过期时间,减少安全风险。

标签: vue
分享给朋友:

相关文章

vue实现一个tab栏

vue实现一个tab栏

Vue 实现 Tab 栏 基础实现(选项式 API) <template> <div class="tab-container"> <div class="t…

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue的实现

vue的实现

Vue 的实现原理 Vue 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现的主要技术细节。 响应式系统 Vue 的响…

vue实现返回

vue实现返回

返回按钮功能实现 在Vue中实现返回功能通常有两种方式:使用浏览器历史记录的history.back()或结合Vue Router进行编程式导航。以下是具体实现方法: 使用浏览器API metho…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

vue实现模块

vue实现模块

Vue 实现模块化的方法 Vue 支持多种模块化开发方式,可以根据项目需求选择适合的方案。 使用单文件组件(SFC) 单文件组件是 Vue 最常用的模块化方式,将模板、脚本和样式封装在一个 .vue…