Last active
April 24, 2021 15:31
-
-
Save AntonioErdeljac/d4b1611e8ce92943c067b3a6ab51154b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const mongoose = require('mongoose'); | |
const crypto = require('crypto'); | |
const jwt = require('jsonwebtoken'); | |
const { Schema } = mongoose; | |
const UsersSchema = new Schema({ | |
email: String, | |
hash: String, | |
salt: String, | |
}); | |
UsersSchema.methods.setPassword = function(password) { | |
this.salt = crypto.randomBytes(16).toString('hex'); | |
this.hash = crypto.pbkdf2Sync(password, this.salt, 10000, 512, 'sha512').toString('hex'); | |
}; | |
UsersSchema.methods.validatePassword = function(password) { | |
const hash = crypto.pbkdf2Sync(password, this.salt, 10000, 512, 'sha512').toString('hex'); | |
return this.hash === hash; | |
}; | |
UsersSchema.methods.generateJWT = function() { | |
const today = new Date(); | |
const expirationDate = new Date(today); | |
expirationDate.setDate(today.getDate() + 60); | |
return jwt.sign({ | |
email: this.email, | |
id: this._id, | |
exp: parseInt(expirationDate.getTime() / 1000, 10), | |
}, 'secret'); | |
} | |
UsersSchema.methods.toAuthJSON = function() { | |
return { | |
_id: this._id, | |
email: this.email, | |
token: this.generateJWT(), | |
}; | |
}; | |
mongoose.model('Users', UsersSchema); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@MenaiAla Generate a secure password and store it in
.env
. Also, sorry for being so irate in my previous comment.