我的express应用程序用户的身份验证护照。身份验证有效。我正在尝试实现密码重置,并得到以下错误。
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路由: Its in .\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");
}
});
});
我正在等待密码被重置。我看不出我做错了什么。耽误您时间,实在对不起!
发布于 2019-06-19 05:27:42
setPassword是一种模式方法,它用于模型的实例,而不是模型本身。您正在对显示错误的用户Model.Thats使用setPassword
如果您想要更改密码,则需要使用returneduser对象
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");
}
});
});
https://stackoverflow.com/questions/56654621
复制相似问题