2016-06-23 8 views
0

ローカル戦略を使用して認証する問題が発生しています。無効な資格情報や何かが失敗した場合は、適切なエラーが表示されます。しかし、認証が成功すると404エラーが表示されます。NodeJS、Passport&Passport-Local

私は周囲を掘り下げました。私が遭遇した最善のアイデアは、セッション記憶域を落とすことでした(ユーザーをシリアライズしている間に起こっているようです)。誰でもこのような問題が発生しますか?

コードの一部ですが、コードの他のセクションが必要な場合は、私が喜んで提供することをお知らせください。

私のパスポート設定:

var passport = require('passport'), 
User = require('mongoose').model('User'); 

module.exports = function() { 
    passport.serializeUser(function (user, done) { 
     done(null, user.id); 
    }); 

    passport.deserializeUser(function (id, done) { 
     User.findOne({ _id: id }, '-password -salt -__v', function (err, user) { 
      done(err, user); 
     }); 
    }); 

    require('./strategies/local')(); 
}; 

私の地元の戦略構成:

var passport = require('passport'), 
    LocalStrategy = require('passport-local').Strategy, 
    User = require('mongoose').model('User'); 

module.exports = function() { 
    passport.use(new LocalStrategy({ 
     usernameField: 'email' 
    }, function (email, password, done) { 
     User.findOne({email: email}, function (err, user) { 
      if (err) { 
       return done(err); 
      } 

      if(!user || !user.active || !user.authenticate(password)) { 
       return done(null, false, { message: 'Authentication Failed'}); 
      } 

      return done(null, user); 
     }); 
    })); 
}; 

他のすべてのメソッドが動作し、私は、ユーザーを見つけるためにDBを照会することができ、私はハッシュされたパスワードをマッチングを通じて強化しています提供されたパスワードで、すべてがうまくいくように見えて、LocalStrategyの最後にユーザーがいます(私は最終的にdone(null, user)にします)serializeUser()done(null, user.id)何かが起きました。私が実際に何が起きているのかを知ることはできません。

+1

それはpassport.authentic 'へのコールのように聞こえますate() 'が正しく設定されていない可能性があります。あなたはそれをどのように使っているのかを示すことができますか?私はそこに何か特別なことをやっていないよ – robertklep

+0

: 'app.route( '/ログイン') \t \t .post(passport.authenticate( 'ローカル'));私は、任意のリダイレクトを行う必要はありません' 何か、私はちょうどそれがフロントエンドにユーザーオブジェクトを返す必要があります。 最近、ノード暗号 'pbkdf2Sync'は、ダイジェストなしで呼び出すと非難されてしまったので、これを追加しました。 - それをテストしただけで、同じことが得られます... –

答えて

1

これはあなたのルートの設定です:

app.route('/login').post(passport.authenticate('local')); 

認証が失敗したとき、これは401(「不正な」)を生成しますが、それが成功した場合、あなたが次に何が起こるように設定何もないので、 「あなたは、あなたのルートに明示的な 『成功』のハンドラを追加する必要があります404

を得るでしょう:

​​
+0

このシナリオでは、リクエストオブジェクトは 'null'です。 'serializeUser()'で起こっていることは、データのいずれかを爆破することです。 –

+0

だから、もう少し掘り下げて、コネクト・モンゴを見つけました。私はセッションを保存するためにこれを使用しました。パスポートセッションが保存されていることがわかりました。何かが 'serializeUser()'自体の中で爆破されなければなりません(潜在的には、 )。私は何かを見つけることができるかどうかを確認するためにパスポートのギブスを掘っています。 –

+0

他の何かが日陰になっている必要があります、同じシステムを使用して私が持っている別のプロジェクトは、仕事を終了しました。今週の初めにうまくいきました。パッケージのアップデートやそのようなものはありません...私は家のマシンでこれをもう一度試してみてください。 –

関連する問題