Spaces:
Sleeping
Sleeping
| const mongoose = require('mongoose'); | |
| const bcrypt = require('bcryptjs'); | |
| const userSchema = new mongoose.Schema( | |
| { | |
| username: { | |
| type: String, | |
| required: [true, '请输入用户名'], | |
| unique: true, | |
| trim: true, | |
| }, | |
| password: { | |
| type: String, | |
| required: [true, '请输入密码'], | |
| minlength: [6, '密码长度不能小于6个字符'], | |
| }, | |
| isAdmin: { | |
| type: Boolean, | |
| default: false, | |
| }, | |
| }, | |
| { | |
| timestamps: true, | |
| } | |
| ); | |
| // 密码匹配方法 | |
| userSchema.methods.matchPassword = async function (enteredPassword) { | |
| try { | |
| return await bcrypt.compare(enteredPassword, this.password); | |
| } catch (error) { | |
| console.error('密码比较出错:', error); | |
| return false; | |
| } | |
| }; | |
| // 保存前加密密码 | |
| userSchema.pre('save', async function (next) { | |
| if (!this.isModified('password')) { | |
| return next(); // 修复:确保不重复加密 | |
| } | |
| try { | |
| const salt = await bcrypt.genSalt(10); | |
| this.password = await bcrypt.hash(this.password, salt); | |
| next(); | |
| } catch (error) { | |
| next(error); | |
| } | |
| }); | |
| const User = mongoose.model('User', userSchema); | |
| module.exports = User; |