首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >错误: user.setPassword不是一个函数(在密码重置期间)

错误: user.setPassword不是一个函数(在密码重置期间)
EN

Stack Overflow用户
提问于 2019-06-19 01:56:02
回答 1查看 631关注 0票数 0

我的express应用程序用户的身份验证护照。身份验证有效。我正在尝试实现密码重置,并得到以下错误。

TypeError: user.setPassword不是函数

我已经在stackoverflow和其他网站上找到了这个错误,它们都指向"passport-local-mongoose",但我已经有了这个模块。不确定这里还有什么问题:

这是我的.\models\user.js

代码语言:javascript
复制
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中的表单

代码语言:javascript
复制
            <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路由: Its in .\routes\auth.js

代码语言:javascript
复制
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");
          }
    });
});

我正在等待密码被重置。我看不出我做错了什么。耽误您时间,实在对不起!

EN

回答 1

Stack Overflow用户

发布于 2019-06-19 05:27:42

setPassword是一种模式方法,它用于模型的实例,而不是模型本身。您正在对显示错误的用户Model.Thats使用setPassword

如果您想要更改密码,则需要使用returneduser对象

代码语言:javascript
复制
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");
      }
});

});

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56654621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档