42 lines
719 B
TypeScript
42 lines
719 B
TypeScript
|
import mongoose from "mongoose";
|
||
|
import bcrypt from "bcrypt"
|
||
|
|
||
|
const Schema = mongoose.Schema
|
||
|
|
||
|
const UserSchema = new Schema({
|
||
|
email: {
|
||
|
type: String,
|
||
|
required: true,
|
||
|
unique: true
|
||
|
},
|
||
|
password: {
|
||
|
type: String,
|
||
|
required: true
|
||
|
}
|
||
|
})
|
||
|
|
||
|
UserSchema.pre(
|
||
|
"save",
|
||
|
async function(next) {
|
||
|
const hash = await bcrypt.hash(this.password, 10)
|
||
|
this.password = hash;
|
||
|
next();
|
||
|
}
|
||
|
)
|
||
|
|
||
|
UserSchema.methods.isValidPassword = async function(password: string) {
|
||
|
const compare = await bcrypt.compare(password, this.password)
|
||
|
return compare
|
||
|
}
|
||
|
|
||
|
export interface User {
|
||
|
email: string;
|
||
|
password: string;
|
||
|
isValidPassword: (password: string) => Promise<boolean>
|
||
|
}
|
||
|
|
||
|
export const UserModel = mongoose.model("user", UserSchema)
|
||
|
|
||
|
|
||
|
|