错误的user.setPassword不是函数(密码重置期间)

时间:2019-06-18 17:56:01

标签: node.js express mongoose passport.js

我的快速应用程序用户的认证护照。身份验证有效。我正在尝试实施密码重置并收到以下错误。

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路由: 它在。\ routes \ 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 :(得分:0)

setPassword是一种模式方法,它用于模型的实例,而不是模型本身。您正在将setPassword与用户模型一起使用。这就是为什么显示错误

如果要更改密码,则需要使用返回的用户对象

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");
      }
});

});