1

アプリケーションをデバッグしようとしていますが、そうしているうちに、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 が期待どおりに機能しているようです。ログに記録すると、どちらも適切な資格情報を報告します。

4

0 に答える 0