Node.js TypeError:done不是函数吗?
您提供给passport.use的回调参数太多Node.js TypeError:done不是函数吗?,node.js,express,passport-local,Node.js,Express,Passport Local,您提供给passport.use的回调参数太多 app.post('/sign', passport.authenticate('signup', { successRedirect: 'login', failureRedirect: '/', failureFlash: true })); passport.use('signup', new LocalStrategy({ usernameField: "Email", passwordFie
app.post('/sign', passport.authenticate('signup', {
successRedirect: 'login',
failureRedirect: '/',
failureFlash: true
}));
passport.use('signup', new LocalStrategy({
usernameField: "Email",
passwordField: "Password",
passReqToCallback: true,
}, function(req, Email, Password, Name, Username, Confirm, done) {
Name = req.body.Name;
Username = req.body.Username;
Confirm = req.body.Confirm;
process.nextTick(function() {
crud.findOne({ Email: Email }, function(err, user) {
if (err) {
return done(err);
}
if (user) {
return done(null, false, console.log("Email is already used"));
}
var data = new crud();
data.Confirm = Confirm;
data.Password = Password;
data.Email = Email;
data.Username = Username;
data.Name = Name;
data.save(function(err) {
if (err) throw err;
return done(null, data, console.log("Successfullt"));
})
})
})
}));
它们的数量和顺序很重要,因为passport策略只提供某些参数来分配它们的值。而且,在JavaScript中,参数与它们的标识符/名称不匹配
使用passport local,并且将passReqToCallback设置为true时:
任何附加变量都应在函数体中使用var或let语句声明:
passport.use(..., function (req, username, password, done) {
console.log(req === arguments[0]); // true
console.log(username === arguments[1]); // true
console.log(password === arguments[2]); // true
console.log(done === arguments[3]); // true
// ...
});
请添加一些关于问题的描述,而不仅仅是简单的代码。
passport.use(..., function (req, username, password, done) {
console.log(req === arguments[0]); // true
console.log(username === arguments[1]); // true
console.log(password === arguments[2]); // true
console.log(done === arguments[3]); // true
// ...
});
var Name = req.body.Name;
var Username = req.body.Username;
var Confirm = req.body.Confirm;