2016-11-18 10 views
0
exports.initPassportLocalStrategy = function() { 
    passport.use(new LocalStrategy(
    { 
     session: false 
    }, 
    function(username, password, done) { 
     UserProxy.validateUserWithPassword(username, password) 
     .then(function (user) { 
      if(user) done(null, user); 
      else done(null, false); 
     }) 
     .catch(done); 
    } 
)); 

    passport.serializeUser(function(user, cb) { 
    cb(null, user); 
    }); 
}; 

私はseesionのないトークンベースの認証ミドルウェアを実装しています。だから私はなぜserialzeUser機能を提供する必要があるのだろうと思っていたのですか?私は、その理由がユーザーまたはそのプロパティのいくつかをセッションに入れてから、desearlizeUserがセッションからオブジェクト全体を取得してreq.userに入れることを読んだ。だからここPassportJSノード:セッションを使用していない場合でもserializeUserとdeserializeUserが必要な理由

は私の質問です:

  1. なぜ(ヌル、ユーザー)行われていないことができます。 LocalStrategy機能では、ユーザをreq.userに入れますか?なぜシリアル化して、deserailieを気にしますか?

  2. searlizeUser機能を削除するとエラーが表示されますが、deserilzeUser機能がないと離れることがあります。なぜですか?この場合、ユーザーオブジェクトは誰に入れますかreq.user

多くのありがとう。

答えて

0

シリアライズ/デシリアライズは必要ありません。あなたの設定はやや間違っています。 session: falseを戦略から外してpassport.authenticateに移動する必要があります。これは、戦略がこれを決めることができないためです。どのような種類の認証を必要とするかは、あなたのルートに依存しています。

passport.use(new LocalStrategy(
    function(username, password, done) { 
    UserProxy.validateUserWithPassword(username, password) 
     .then(function (user) { 
     if(user) done(null, user); 
     else done(null, false); 
     }) 
     .catch(done); 
    } 
)); 
app.use(passport.initialize()); 
app.post('/auth', passport.authenticate( 
    'local', { 
    session: false // here goes the session false 
    }), doWhateverYourSetupNeeds); 
関連する問題