33 lines
1.0 KiB
JavaScript
33 lines
1.0 KiB
JavaScript
|
const mongoose = require('mongoose');
|
||
|
const bcrypt = require('bcrypt');
|
||
|
|
||
|
const UserSchema = new mongoose.Schema({
|
||
|
username: { type: String, required: true, unique: true },
|
||
|
password: { type: String, required: true },
|
||
|
following: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
|
||
|
profilePicture: { type: String, default: "" },
|
||
|
bio: { type: String, default: "" },
|
||
|
pronouns: { type: String, default: "" },
|
||
|
email: { type: String, default: "" },
|
||
|
name: { type: String, default: "" },
|
||
|
});
|
||
|
|
||
|
UserSchema.methods.validPassword = function (password) {
|
||
|
return bcrypt.compareSync(password, this.password);
|
||
|
};
|
||
|
|
||
|
UserSchema.pre('save', function (next) {
|
||
|
const user = this;
|
||
|
if (!user.isModified('password')) return next();
|
||
|
bcrypt.genSalt(10, function (err, salt) {
|
||
|
if (err) return next(err);
|
||
|
bcrypt.hash(user.password, salt, function (err, hash) {
|
||
|
if (err) return next(err);
|
||
|
user.password = hash;
|
||
|
next();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
module.exports = mongoose.model('User', UserSchema);
|