2016-09-28 2 views
0

Пытаясь понять https://github.com/jaredhanson/passport/blob/master/lib/middleware/authenticate.js, в строке 57.нелогичные аргументы метода Passport AUTHENTICATE

Я не понимаю, почему метод паспорт Аутентифицировать имеет 4 аргумента:

module.exports = function authenticate(passport, name, options, callback){/*code*/} 

На практике используется так:

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

или

passport.authenticate('local', function(req, res)); 

Итак, почему первый аргумент «паспорт» в определении метода не мешает? Поскольку имя стратегии передается в качестве первого аргумента, оно должно быть отображено в паспорт, чтобы он не назывался.

+0

Если бы это был Python, я бы сказал вам, что первый аргумент получает объект «паспорт» из выражения «pass.authenticate». Javascript обычно не работает таким образом, но я не удивлюсь, узнав, что кто-то нашел способ * сделать *, он работает таким образом. – zwol

ответ

3

Вы пропустили промежуточный слой here:

Authenticator.prototype.authenticate = function(strategy, options, callback) { 
    return this._framework.authenticate(this, strategy, options, callback); 
}; 

Переменная passport является экземпляром класса Authenticator, поэтому описанный выше способ представляет собой passport.authenticate(). Как вы можете видеть, он передал ссылку на себя в качестве первого аргумента функции, к которой вы обращаетесь (к которой относится this._framework.authenticate).