123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- const { pool } = require('../config/database');
- const bcrypt = require('bcryptjs');
- // 创建用户表
- const createUserTable = async () => {
- try {
- await pool.query(`
- CREATE TABLE IF NOT EXISTS users (
- id INT AUTO_INCREMENT PRIMARY KEY,
- username VARCHAR(50) NOT NULL UNIQUE,
- password VARCHAR(255) NOT NULL,
- role ENUM('admin', 'user') DEFAULT 'user',
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- )
- `);
- console.log('用户表创建/检查成功');
- } catch (error) {
- console.error('创建用户表失败:', error);
- throw error;
- }
- };
- // 初始化表
- createUserTable().catch(error => {
- console.error('初始化用户表失败:', error);
- });
- // 用户相关方法
- const User = {
- // 根据用户名查找用户
- findByUsername: async (username) => {
- try {
- console.log('正在查找用户:', username);
- const [rows] = await pool.query(
- 'SELECT * FROM users WHERE username = ?',
- [username]
- );
- console.log('查询结果:', rows[0] ? '找到用户' : '未找到用户');
- return rows[0];
- } catch (error) {
- console.error('查找用户失败:', error);
- throw error;
- }
- },
- // 根据ID查找用户
- findById: async (id) => {
- try {
- const [rows] = await pool.query(
- 'SELECT * FROM users WHERE id = ?',
- [id]
- );
- return rows[0];
- } catch (error) {
- console.error('根据ID查找用户失败:', error);
- throw error;
- }
- },
- // 创建用户
- create: async (userData) => {
- try {
- const hashedPassword = await bcrypt.hash(userData.password, 10);
- const [result] = await pool.query(
- 'INSERT INTO users (username, password, role) VALUES (?, ?, ?)',
- [userData.username, hashedPassword, userData.role || 'user']
- );
- return result.insertId;
- } catch (error) {
- console.error('创建用户失败:', error);
- throw error;
- }
- },
- // 更新用户密码
- updatePassword: async (id, newPassword) => {
- try {
- const hashedPassword = await bcrypt.hash(newPassword, 10);
- await pool.query(
- 'UPDATE users SET password = ? WHERE id = ?',
- [hashedPassword, id]
- );
- } catch (error) {
- console.error('更新密码失败:', error);
- throw error;
- }
- },
- // 验证密码
- comparePassword: async (password, hashedPassword) => {
- try {
- if (!password || !hashedPassword) {
- console.error('密码比较失败: 缺少密码或哈希值');
- return false;
- }
- return await bcrypt.compare(password, hashedPassword);
- } catch (error) {
- console.error('密码比较失败:', error);
- throw error;
- }
- },
- // 更新用户信息
- update: async (id, updateData) => {
- try {
- const [result] = await pool.query(
- 'UPDATE users SET contact = ?, remark = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?',
- [updateData.contact, updateData.remark, id]
- );
- return result.affectedRows > 0;
- } catch (error) {
- console.error('更新用户信息失败:', error);
- throw error;
- }
- }
- };
- module.exports = User;
|