成功,但仍在使用 failureRedirect - passport
Successful, but still using failureRedirect - passport
app.post('/signup', passport.authenticate('local-signup', {
successRedirect: '/',
failureRedirect: '/signup',
failureFlash: true
}));
这是路线。
passport.use('local-signup', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
},
function(req, email, password, done) {
process.nextTick(function() {
User.findOne({ 'local.email': email }, function(err, user) {
if(err)
return done(err);
if(user) {
return done(null, false, req.flash('signupMessage', 'That email is already taken'));
} else {
var newUser = new User();
newUser.local.email = email;
newUser.local.password = newUser.generateHash(password);
newUser.save(function(err) {
done(err, user);
});
}
});
});
}));
这是护照配置文件。该表单按预期工作并使用我的 mongo 模式保存,但它使用的是 failureRedirect 而不是 successRedirect,有人注意到有什么不对吗?
当您对新创建的用户调用保存函数时,您忘记将第二个参数传递给它的回调,这是从数据库返回的用户文档。
根据您当前的代码逻辑,您最后完成的函数中的用户指的是来自 findOne 的回调,因此永远不会到达那里,因为如果此时有用户从服务器返回,它将执行 if (user) { ... }
.
确保像这样传递第二个参数来保存:
newUser.save(function(err, user) {
done(err, user);
});
app.post('/signup', passport.authenticate('local-signup', {
successRedirect: '/',
failureRedirect: '/signup',
failureFlash: true
}));
这是路线。
passport.use('local-signup', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
},
function(req, email, password, done) {
process.nextTick(function() {
User.findOne({ 'local.email': email }, function(err, user) {
if(err)
return done(err);
if(user) {
return done(null, false, req.flash('signupMessage', 'That email is already taken'));
} else {
var newUser = new User();
newUser.local.email = email;
newUser.local.password = newUser.generateHash(password);
newUser.save(function(err) {
done(err, user);
});
}
});
});
}));
这是护照配置文件。该表单按预期工作并使用我的 mongo 模式保存,但它使用的是 failureRedirect 而不是 successRedirect,有人注意到有什么不对吗?
当您对新创建的用户调用保存函数时,您忘记将第二个参数传递给它的回调,这是从数据库返回的用户文档。
根据您当前的代码逻辑,您最后完成的函数中的用户指的是来自 findOne 的回调,因此永远不会到达那里,因为如果此时有用户从服务器返回,它将执行 if (user) { ... }
.
确保像这样传递第二个参数来保存:
newUser.save(function(err, user) {
done(err, user);
});