アプリケーションをデバッグしようとしていますが、そうしているうちに、HTTP GET 要求がどのようにルートに到達するかを完全には理解していないことに気付きました。つまり、ミドルウェアを次のように構成すると、次のようになります。
app.configure(function(){
// options
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
// middleware
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.cookieParser('your secret here'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public')));
});
あらゆる種類のすべての HTTP リクエストは、ミドルウェアを介して段階的に送られますよね?
私が抱えている問題は、ミドルウェアのどこかでusers
、データベースのコレクションがクエリさreq.user
れ、間違ったuser
ドキュメントが入力されていることです。それがどこで発生している可能性があるのか わかりません。ミドルウェアが原因であることはわかっていますが、この時点でデバッグ能力が低下し始めています。どんな助けでも大歓迎です。
編集:これが私のパスポートの設定です:
passport.use(new LocalStrategy(function( username, password, done ) {
models.User.authenticate( username, password, function( err, user) {
// reports CORRECT user
console.log('\nmodels.User.authenticate callback');
console.log('--username is ' + user.username);
console.log(util.inspect(user));
// return done( err, user );
return done( err, user);
});
}));
passport.serializeUser(function( user, done ) {
// reports CORRECT user
console.log('\npassport.serializeUser');
console.log('--username is ' + user.username);
console.log('--user._id is ' + user._id);
console.log(util.inspect(user));
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
// reports CORRECT user id
console.log('\npassport.deserializeUser()');
console.log('user._id is ' + id);
models.User.findOne( id, function (err, user) {
done(err, user);
});
});
serializeUser と deserializeUser が期待どおりに機能しているようです。ログに記録すると、どちらも適切な資格情報を報告します。