我的快速应用程序用户的认证护照。身份验证有效。我正在尝试实施密码重置并收到以下错误。
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");
}
});
});
我希望重新设置密码。我看不到我在做什么错。 谢谢您的宝贵时间!
答案 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");
}
});
});