当前位置:首页 > 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 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

vue实现录像

vue实现录像

Vue 实现录像功能 在 Vue 中实现录像功能通常需要借助浏览器的 MediaDevices API 和 MediaRecorder API。以下是实现步骤: 获取用户摄像头和麦克风权限 使用 n…

vue拖动实现

vue拖动实现

实现 Vue 拖动功能的方法 使用 HTML5 拖放 API 在 Vue 中可以利用 HTML5 的原生拖放 API 实现拖动功能。通过 draggable 属性标记可拖动元素,结合 @dragsta…

vue实现CRUD

vue实现CRUD

Vue 实现 CRUD 操作 Vue 提供了响应式数据绑定和组件化开发能力,结合后端 API 可以轻松实现 CRUD(增删改查)功能。以下是基于 Vue 3 和 Axios 的完整实现方案。 安装依…

vue实现eventbus

vue实现eventbus

Vue 中实现 EventBus 在 Vue 中,EventBus 是一种跨组件通信的机制,尤其适用于非父子组件之间的数据传递。以下是实现 EventBus 的几种方法: 方法一:使用 Vue 实例…

vue实现书库

vue实现书库

Vue 实现书库功能 使用 Vue 构建书库功能需要结合前端框架和后端数据管理。以下是实现步骤和关键点: 项目初始化 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 和状…