okk, I found the max login attemp solution on the wrong password in mongoose and expressjs.there is a solution. * first, define the user scheme * second, we will define max login for the function of the handler for the incorrect password * thirdly, when we create a login api, then we will check this function so that how many times the user login with the wrong password is ready for the code
var config = require('../config'); var userSchema = new mongoose.Schema({ email: { type: String, unique: true, required: true }, password: String, verificationToken: { type: String, unique: true, required: true }, isVerified: { type: Boolean, required: true, default: false }, passwordResetToken: { type: String, unique: true }, passwordResetExpires: Date, loginAttempts: { type: Number, required: true, default: 0 }, lockUntil: Number, role: String }); userSchema.virtual('isLocked').get(function() { return !!(this.lockUntil && this.lockUntil > Date.now()); }); userSchema.methods.incrementLoginAttempts = function(callback) { console.log("lock until",this.lockUntil) // if we have a previous lock that has expired, restart at 1 var lockExpired = !!(this.lockUntil && this.lockUntil < Date.now()); console.log("lockExpired",lockExpired) if (lockExpired) { return this.update({ $set: { loginAttempts: 1 }, $unset: { lockUntil: 1 } }, callback); } // otherwise we're incrementing var updates = { $inc: { loginAttempts: 1 } }; // lock the account if we've reached max attempts and it not locked already var needToLock = !!(this.loginAttempts + 1 >= config.login.maxAttempts && !this.isLocked); console.log("needToLock",needToLock) console.log("loginAttempts",this.loginAttempts) if (needToLock) { updates.$set = { lockUntil: Date.now() + config.login.lockoutHours }; console.log("config.login.lockoutHours",Date.now() + config.login.lockoutHours) } //console.log("lockUntil",this.lockUntil) return this.update(updates, callback); };
here is my login function where we checked the maximum login attempt with the wrong password. We will also call this function
User.findOne({ email: email }, function(err, user) { console.log("i am aurhebengdfhdbndbcxnvndcvb") if (!user) { return done(null, false, { msg: 'No user with the email ' + email + ' was found.' }); } if (user.isLocked) { return user.incrementLoginAttempts(function(err) { if (err) { return done(err); } return done(null, false, { msg: 'You have exceeded the maximum number of login attempts. Your account is locked until ' + moment(user.lockUntil).tz(config.server.timezone).format('LT z') + '. You may attempt to log in again after that time.' }); }); } if (!user.isVerified) { return done(null, false, { msg: 'Your email has not been verified. Check your inbox for a verification email.<p><a href="/user/verify-resend/' + email + '" class="btn waves-effect white black-text"><i class="material-icons left">email</i>Re-send verification email</a></p>' }); } user.comparePassword(password, function(err, isMatch) { if (isMatch) { return done(null, user); } else { user.incrementLoginAttempts(function(err) { if (err) { return done(err); } return done(null, false, { msg: 'Invalid password. Please try again.' }); }); } }); }); }));