Node.js 这个ExpressJS+有什么问题;护照登记路线?它返回400个错误请求
我在下面实现了一个注册路径。它返回“用户保存…”,但请求返回404 它似乎没有执行登录策略:Node.js 这个ExpressJS+有什么问题;护照登记路线?它返回400个错误请求,node.js,express,passport.js,Node.js,Express,Passport.js,我在下面实现了一个注册路径。它返回“用户保存…”,但请求返回404 它似乎没有执行登录策略: router.post("/signup", function(req, res, next) { var email = req.body.email; var password = req.body.password; User.findOne({ email: email }, function(err, user) { if (
router.post("/signup", function(req, res, next) {
var email = req.body.email;
var password = req.body.password;
User.findOne({ email: email }, function(err, user) {
if (err) { return next(err); }
if (user) {
return res.status(409).send({message: "Duplicate user - already registered."});
}
var newUser = new User({
email: email,
password: password
});
newUser.save(next);
console.log("User saved...");
});
},
passport.authenticate("login"),
function(req, res) {
return res.status(200).send({
message: "Signup successful",
user: req.user
});
}
);
我的Passport登录策略如下所示:
passport.use("login", new LocalStrategy(async (email, password, done) => {
console.log("login...");
User.findOne({ email: email }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: "No user has that email!" });
}
user.checkPassword(password, function(err, isMatch) {
console.log("Checked password...");
console.log("Error? Match?");
console.log(err);
console.log(isMatch);
if (err) { return done(err); }
if (isMatch) {
console.log("Returning done...");
return done(null, user, { message: 'Logged in Successfully' });
} else {
return done(null, false, { message: "Invalid password." });
}
});
});
}));
以下是我在日志中看到的内容:
User saved...
POST /signup 400 181.122 ms - -
Passport可能抛出400错误,因为未设置用户名/密码字段 Passport需要用户名和密码,您传递的是电子邮件和密码。因此,您可以修改代码,并让passport的LocalStrategy将电子邮件用作
用户名
您可以按如下方式设置用户名和密码:
passport.use("login", new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
},async (usernameField, passwordField, done) => {
console.log("login...");
User.findOne({ email: usernameField }, function (err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: "No user has that email!" });
}
user.checkPassword(passwordField, function (err, isMatch) {
console.log("Checked password...");
console.log("Error? Match?");
console.log(err);
console.log(isMatch);
if (err) { return done(err); }
if (isMatch) {
console.log("Returning done...");
return done(null, user, { message: 'Logged in Successfully' });
} else {
return done(null, false, { message: "Invalid password." });
}
});
});
}));
您可以检查引发passport源代码错误的行是的,您是对的,LocalStrategy构造函数缺少指定哪些字段用作用户名、密码的选项。