2016-08-07 3 views
0

Я новичок в passportJS, и хочу, чтобы понять этот код:passportjs обратного вызова код поток

app.get('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/login'); } 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/users/' + user.username); 
    }); 
    })(req, res, next); 
}); 

Может кто-нибудь объяснить мне поток этого кода? и что (req, res, next); делать в конце pass.authenticate функции?

Я уже читал this вопрос тоже, но все равно не понимаю.

+0

Ну, он обрабатывает маршрутизацию для «входа» и пытается аутентифицироваться на локальном уровне, и если он сталкивается с любой ошибкой, он отображает то же самое, если пользователь не аутентифицирован, перенаправляет его на логин, иначе он будет перенаправить на страницу \ \ users \ route. '(Req, res, next)' фактически являются значениями, которые вы передаете аргументам функции. –

+0

«(req, res, next) на самом деле являются значениями, которые вы передаете аргументам функции». Извините, какая функция вы имеете в виду? – Kim

+0

Итак, (req, res, next); содержит логические обратные вызовы? Если это правильно, то какая функция (req, res, next) связана с функцией pass.authenticate? – Kim

ответ

0
passport.authenticate()(<args>); 

passport.authenticate() возвращает функцию, которая может иметь три аргумента (req, res, next). Кодовые/аргументы, которые вы спрашиваете эти аргументы, которые передаются в функцию, возвращенный passport.authenticate() Проверьте authenticate.js code on GitHub

Однако, я не очень ясно о том, что делает паспорт делать шпагат local. Я хотел бы знать:

  1. Проходит local строки достаточно для паспорта, чтобы понять, какой механизм аутентификации применять?
  2. Что делает паспорт (и как) после столкновения с использованием стратегии local?
+0

представляется, что при определении стратегии паспорта, например, passport.use ('strategyname', новый StrategyClass()); мы объявляем название стратегии. Это имя позже используется в файле паспорт.authenticate ('strategyName', ..); – DevdattaK

Смежные вопросы