2017-03-14 41 views
0

一些代碼的平均Web開發2en

exports.signin = function(req, res, next) { 
 
    passport.authenticate('local', function(err, user, info) { 
 
     if (err || !user) { 
 
      res.status(400).send(info); 
 
     } else { 
 
      // Remove sensitive data before user.password = undefined; user.salt = undefined; 
 
      req.login(user, function(err) { 
 
       if (err) { 
 
        res.status(400).send(err); 
 
       } else { 
 
        res.json(user); 
 
       } 
 
      }); 
 
     } 
 
    })(req, res, next); 
 
};

這由AmosQ.Haviv.Who「平均Web開發」一書的一段代碼可以告訴我這個方法passport.authenticate混亂() 'tail:(req,res,next)是什麼意思?是封閉嗎?

回答

1

passport.authenticate()可能會採取設置'本地'(域?)和calllback來創建一個新的功能,將執行身份驗證。

這個函數確實會在'local'和回調上創建一個閉包。 新的認證功能需要3個參數:原始req(uest),res(ponse)對象和下一個參數,並立即使用(req, res, next)語法進行調用。

因此,這個特定的函數很可能會執行登錄,然後運行用於創建auth函數的回調函數,將req和res傳遞迴回調函數。

將其視爲一種使用passport.authenticate()方法創建可以使用的不同版本登錄的方法。一個用於「本地」,一個用於「其他域」等。

+0

好的,我已經知道了。謝謝。 – leonardodavinci