web-dev-qa-db-ja.com

Passport認証コールバックはreqおよびresに渡されません

この認証は正常に機能し、リダイレクトを取得します。

server.post(authPostRoute, passport.authenticate(
    'local'
    , { successRedirect: '/', failureRedirect: '/login' }
));     

この認証は、コールバックが呼び出された後にハングします。

server.post(authPostRoute, passport.authenticate(
    'local'
    , function(){ console.log('Hitting the callback'); console.log(arguments)}
));     

これにより、次の部分がログに記録されます。

{ '0': null,
  '1':
   { id: [Getter/Setter],
     firstName: [Getter/Setter],
     lastName: [Getter/Setter],
     email: [Getter/Setter],
     addedOn: [Getter/Setter],
     active: [Getter/Setter],
     password: [Getter/Setter] },
  '2': undefined }

しかし、ドキュメント全体( http://passportjs.org/guide/authenticate/ )は、reqとresが渡されるように見えますが、明らかにそうではありません。次に、コールバックを呼び出すコード:

node_modules\passport\lib\middleware\authenticate.js

  strategy.success = function(user, info) {
    if (callback) {
      return callback(null, user, info);
    }

それらのパラメータを渡しません。私は何が間違っているのですか?

11
akaphenom

OK、昨日9時間、カスタム認証を取り除いてパスポートに置き換える作業をしていました。 node-ormにリクエストの外部でモデルを公開させることと、注文のフローを処理することの間で、私は少し燃え尽きました。コード例は正確です。もっと注意深く読む必要があります。

// traditional route handler, passed req/res
server.post(authPostRoute, function(req, res, next) {

  // generate the authenticate method and pass the req/res
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/'); }

    // req / res held in closure
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.send(user);
    });

  })(req, res, next);

});
19
akaphenom

PassReqToCallbackを有効にして、コールバックでリクエストを取得します。このような:

passport.use(new FacebookStrategy({
    clientID: '555555555555555',
    clientSecret: '555555555555555555555',
    callbackURL: "http://localhost:3000/auth/facebook/callback",
    enableProof: false,
    passReqToCallback: true
  },
  // The request will be provided as 1st param
  function(req, accessToken, refreshToken, profile, done) {
  });...
2
Rori Stumpf