Ошибка user.setPassword не является функцией (во время сброса пароля) - PullRequest
0 голосов
/ 18 июня 2019

Мой пользовательский паспорт приложения для аутентификации. Аутентификация работает. Я пытаюсь осуществить сброс пароля и получаю следующую ошибку.

TypeError: user.setPassword не является функцией

Я прошел через stackoverflow и другие сайты из-за этой ошибки, и все они указывают на «passport-local-mongoose», но у меня уже есть этот модуль. Не уверен, что еще здесь не так:

Вот мой. \ Models \ user.js

var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");

var userSchema = new mongoose.Schema({
    username: String,
    password: String,
    fullname: String,
    role: String,
    status: String
});

userSchema.plugin(passportLocalMongoose); 
module.exports = mongoose.model("user", userSchema);

вот моя форма в. \ Views \ admusrpwreset.ejs

            <form action="/admusrpwreset/<%= user._id %>" method="POST">
                    <UL>
                        <Li>
                            Username  : <span class="admstudyinput"><%= user.username %></span>
                        </Li>
                        <Li>
                            Password : 
                            <input class="admstudyinput" type="password" name="password" placeholder="Minumum 8 characters">
                        </Li>
                        <Li>
                            Confirm : 
                            <input class="admstudyinput" type="password" name="confirm" placeholder="Confirm the password">
                        </Li>
                        <Li>
                            <button class="btn btn-lg btn-block btn-dark" type="submit">RESET</button>
                        </Li>
                    </UL> 
            </form>

Вот POST-маршрут, на который вышеприведенная форма отправляет данные: Это в. \Ways \ auth.js

router.post("/admusrpwreset/:id", isLoggedinAdmin, function(req, res){
    user.findOne(req.params.id, function(err,returneduser){
          if(!user){
              console.log("No user exists");
          }
          if (req.body.password === req.body.confirm){
                user.setPassword(req.body.password, function(err) {
                    user.save(function(err){
                        console.log(err);
                        res.redirect("/adminuser");
                    });
                });
          } else {
             console.log("Passwords do not match")       ;
             res.redirect("/adminuser");
          }
    });
});

Я ожидаю сброса пароля. Я не вижу, что я делаю неправильно. Спасибо за ваше время!

1 Ответ

0 голосов
/ 19 июня 2019

setPassword - это метод схемы, он используется в экземпляре модели, а не в самой модели.Вы используете setPassword с пользователем Model.Thats, почему ошибка показывает

, если вы хотите изменить пароль, вам нужно использовать возвращаемый пользовательский объект

router.post("/admusrpwreset/:id", isLoggedinAdmin, function(req, res){
user.findOne(req.params.id, function(err,returneduser){
      if(!user){
          console.log("No user exists");
      }
      if (req.body.password === req.body.confirm){
            returneduser.setPassword(req.body.password, function(err) {
                returneduser.save(function(err){
                    console.log(err);
                    res.redirect("/adminuser");
                });
            });
      } else {
         console.log("Passwords do not match")       ;
         res.redirect("/adminuser");
      }
});

});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...