当前位置:首页 > VUE

vue mysql登录功能实现

2026-02-22 04:30:04VUE

实现Vue与MySQL登录功能

前端部分(Vue)

安装axios用于发送HTTP请求:

npm install axios

创建登录表单组件(Login.vue):

<template>
  <div>
    <input v-model="username" placeholder="用户名">
    <input v-model="password" type="password" placeholder="密码">
    <button @click="login">登录</button>
    <p v-if="errorMessage">{{ errorMessage }}</p>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      username: '',
      password: '',
      errorMessage: ''
    }
  },
  methods: {
    async login() {
      try {
        const response = await axios.post('http://localhost:3000/login', {
          username: this.username,
          password: this.password
        });
        localStorage.setItem('token', response.data.token);
        this.$router.push('/dashboard');
      } catch (error) {
        this.errorMessage = error.response.data.message;
      }
    }
  }
}
</script>

后端部分(Node.js + MySQL)

安装必要依赖:

vue mysql登录功能实现

npm install express mysql2 body-parser cors jsonwebtoken bcryptjs

创建服务器文件(server.js):

const express = require('express');
const mysql = require('mysql2');
const bodyParser = require('body-parser');
const cors = require('cors');
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');

const app = express();
app.use(bodyParser.json());
app.use(cors());

// 创建MySQL连接
const db = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'yourpassword',
  database: 'auth_db'
});

// 登录路由
app.post('/login', async (req, res) => {
  const { username, password } = req.body;

  db.query(
    'SELECT * FROM users WHERE username = ?',
    [username],
    async (err, results) => {
      if (err) throw err;

      if (results.length === 0) {
        return res.status(401).json({ message: '用户不存在' });
      }

      const user = results[0];
      const isMatch = await bcrypt.compare(password, user.password);

      if (!isMatch) {
        return res.status(401).json({ message: '密码错误' });
      }

      const token = jwt.sign(
        { id: user.id, username: user.username },
        'yourSecretKey',
        { expiresIn: '1h' }
      );

      res.json({ token });
    }
  );
});

app.listen(3000, () => {
  console.log('服务器运行在端口3000');
});

数据库准备

创建用户表SQL:

vue mysql登录功能实现

CREATE DATABASE auth_db;

USE auth_db;

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL UNIQUE,
  password VARCHAR(255) NOT NULL
);

-- 插入测试用户(密码使用bcrypt加密后的字符串)
INSERT INTO users (username, password) VALUES 
('testuser', '$2a$10$xJwL5v5z3U9x5Z5q5v5Z5e');

安全注意事项

使用bcrypt加密存储密码:

const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(password, salt);

实现JWT验证中间件:

function authenticateToken(req, res, next) {
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(' ')[1];

  if (!token) return res.sendStatus(401);

  jwt.verify(token, 'yourSecretKey', (err, user) => {
    if (err) return res.sendStatus(403);
    req.user = user;
    next();
  });
}

前端路由保护

在Vue router中添加导航守卫:

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token');

  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login');
  } else {
    next();
  }
});

测试流程

  1. 启动MySQL服务并创建数据库
  2. 运行Node.js服务器(node server.js)
  3. 启动Vue开发服务器(npm run serve)
  4. 访问前端页面测试登录功能

标签: 功能vue
分享给朋友:

相关文章

vue实现考试多选功能

vue实现考试多选功能

实现考试多选功能的方法 数据绑定与选项渲染 使用v-model绑定用户选择的答案数组,配合v-for渲染选项列表: <template> <div v-for="(op…

vue实现页面定位

vue实现页面定位

Vue 实现页面定位的方法 在 Vue 中实现页面定位通常可以通过以下几种方式完成,包括使用原生 JavaScript 的 scrollIntoView 方法、Vue Router 的滚动行为配置,以…

vue实现无限循环

vue实现无限循环

Vue实现无限循环的方法 在Vue中实现无限循环可以通过多种方式完成,以下是几种常见的方法: 使用CSS动画 通过CSS的animation属性结合@keyframes可以实现无限循环动画效果。…

vue封装datepicker实现

vue封装datepicker实现

封装 Vue DatePicker 组件 封装一个 Vue DatePicker 组件可以通过以下方式实现。这里以基于第三方库(如 v-calendar 或 element-ui 的 DatePick…

微前端 vue实现

微前端 vue实现

微前端 Vue 实现方案 微前端是一种将多个独立前端应用组合成一个整体的架构模式,适用于大型项目或团队协作。以下是基于 Vue 的微前端实现方案: 使用 qiankun 框架 qiankun 是蚂蚁…

vue实现

vue实现

Vue 实现的基本方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是一些常见的 Vue 实现方法: 安装 Vue 通过 CDN 引入 Vue: <scri…