2016-11-18 22 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); 
    }); 
}; 

我正在實施基於令牌的身份驗證中間件而沒有見證。所以我想知道爲什麼我需要提供serialzeUser函數?我讀過的原因是將用戶或其某些屬性放入會話中,然後desearlizeUser將從會話中檢索整個對象並將其放入req.userPassportJS Node:爲什麼需要serializeUser和deserializeUser,即使不使用會話?

因此,這裏是我的問題:

  1. 爲什麼不能做(NULL,用戶);在LocalStrategy函數中把用戶放入req.user?爲什麼甚至會煩擾連載和破壞?

  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); 
相關問題