と呼ばれていないコールバックを認証し、私はエラー条件は、次のコードを使用して発生したときに何が起こるかをテストしていた:?NodejsパスポートNodejsパスポートを使用して
passport.use(new LocalStrategy(
function(username, password, done) {
// asynchronous verification, for effect...
process.nextTick(function() {
findByUsername(username, function(err, user) {
console.log('in auth function');
return done('errortest');
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Unknown user ' + username });
}
if (user.password != password) {
return done(null, false, { message: 'Invalid password' });
}
return done(null, user);
})
});
}
));
app.get('/logintest', function(req, res, next) {
console.log('before authenticate');
passport.authenticate('local', function(err, user, info) {
console.log('authenticate callback');
if (err) { return res.send({'status':'err','message':err.message}); }
if (!user) { return res.send({'status':'fail','message':info.message}); }
req.logIn(user, function(err) {
if (err) { return res.send({'status':'err','message':err.message}); }
return res.send({'status':'ok'});
});
})(req, res, next);
});
ルートを使用して/ logintestユーザ名=ボブ&パスワード= S私は、「コールバックを認証」「認証機能で」その後、「認証前」、コンソールに表示することが予想されるが、それは唯一の「errortest」に続く最初の二つを示し、「errortestは」ブラウザに表示されます。
Iはまたreturn done({'message':'test'});
および「[対象オブジェクトは」コンソールで、ブラウザに表示されていた試みました。
が、これは正常に動作していないか、私が何かをしないのですか?
EDIT:ジャレッド・ハンソンの応答を1として、(app.getする3番目の引数としてこのエラーハンドラ関数を追加することは)私は、エラーをキャッチし、適切なJSONを返すことができます:
...
})(req, res, next);
},
function(err, req, res, next) {
// failure in login test route
return res.send({'status':'err','message':err.message});
});
感謝。私はnode.jsをかなり使い慣れていますが、ユースケースはjquery ajax呼び出しを介してログインしています。成功した場合は「ok」、エラーが発生した場合は悪いユーザ名/パスワードが「失敗」、失敗した場合は「err」というステータスのjsonオブジェクトを返したいとします。 (私は成功のために作られたコードの編集に注意してください。) – KevinVictor
カスタムコールバックが呼び出されたときに、常にerrはnullですか? – KevinVictor
GitHubの問題についてフォローアップを投稿しました。コードをより適切にフォーマットすることができました。 https://github.com/jaredhanson/passport-local/issues/15 –