UNPKG

nbd-app

Version:

🚀 CLI tool to scaffold full-stack authentication starter projects with React, Node.js, and multiple auth providers (Email, Google, and more)

36 lines (31 loc) • 1.44 kB
const mongoose = require('mongoose'); const bcrypt = require('bcryptjs'); const config = require('../config'); const userSchema = new mongoose.Schema({ username: { type: String, required: [true, 'Username is required'], unique: true, trim: true, minlength: 3, maxlength: 20 }, email: { type: String, required: [true, 'Email is required'], unique: true, trim: true, lowercase: true, match: [/^\S+@\S+\.\S+$/, 'Please provide a valid email address'] }, password: { type: String, required: [true, 'Password is required'], minlength: 6, select: false }, avatar: { type: String, default: "" }, // <-- avatar field for image URL createdAt: { type: Date, default: Date.now }, // Email verification fields: isVerified: { type: Boolean, default: false }, emailVerificationToken: { type: String }, emailVerificationExpires: { type: Date }, resetPasswordToken: { type: String }, resetPasswordExpires: { type: Date }, }); userSchema.pre('save', async function (next) { if (!this.isModified('password')) return next(); try { const salt = await bcrypt.genSalt(config.bcrypt.saltRounds); this.password = await bcrypt.hash(this.password, salt); next(); } catch (error) { next(error); } }); userSchema.methods.comparePassword = async function (candidatePassword) { return await bcrypt.compare(candidatePassword, this.password); }; const User = mongoose.model('User', userSchema); module.exports = User;