0

Below is the code I am trying: index.jsand its not working while changing the password in terms of salt and hash.(saving them in database) I am keep getting the error as setPassword is not defined. Also I think I am committing code errors as well. I want the exact route code for change password using 'passport-local' Strategy.

P.S. I am able to successfully register the user and login as well. I just want to give him the option to change the password.

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

   User.findOne({id: req.user.id}, function (err, data) {
             console.log("came inside api changePassword else condition inside User.findOne");
             if (err) {
              console.log(err);
             }
             else {
           data.setPassword(req.body.newPass, function(err,datas){
             if(datas) {
             data.save(function (err,datass) {
              if (err) {
                res.render('settingsClient', {errorMessages: err});
              } else {
                console.log("Hash and Salt saved");
              }
            });
          }
          else {
            console.log("setPassword error"+ err);
          }
           });
        }
          })

This is Models (user.js) with which I am saving the password at the start of registration of user as hash and salt.

var mongoose = require('mongoose');
var crypto = require('crypto');

var userSchema = new mongoose.Schema({
  email: {
    type: String,
    unique: true,
    required: true
  },
  name: {
    type: String,
    required: true
  },
 
  hash: String,
  salt: String


});

userSchema.methods.setPassword = function(password) {
  this.salt = crypto.randomBytes(16).toString('hex');
  this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, 'sha1').toString('hex');
};

userSchema.methods.validPassword = function(password) {
  var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, 'sha1').toString('hex');
  return this.hash === hash;
};

module.exports = mongoose.model('User', userSchema);
Biku7
  • 450
  • 6
  • 16
  • Does this answer your question? [user.setPassword is not a function - passport local mongoose](https://stackoverflow.com/questions/56204332/user-setpassword-is-not-a-function-passport-local-mongoose) – Alex Yepes Oct 25 '20 at 11:16
  • No. I am not using and want to use passport-local mongoose. The package here I am asking about is only: passport-local Strategy not passport-local mongoose. @AlexYepes – Biku7 Oct 25 '20 at 11:23

0 Answers0