Наличие request.account при переносе passport.authorize в анонимную функцию - PullRequest
0 голосов
/ 23 мая 2019

В поисках понимания того, почему атрибут req.account, который создается во время вызова passport.authorize() - , существует для промежуточного ПО нижестоящего уровня callback.bind() впервый случай, но не второй?

первый случай:

auth.get(
  `/callback/${strategy.name}`,
  passport.authorize(strategy.name, {
    failureRedirect: '/v1/auth/error',
    successRedirect: '/v1/users/me'
  }),
  callback.bind(null, strategy)
)

второй случай:

auth.get(
  `/callback/${strategy.name}`,

  // primary difference here: wrapping passport.authorize in function
  function(req, res, next){
   if (strategy.name == 'google') {
     passport.authorize(strategy.name, {
       failureRedirect: '/error',
       successRedirect: '/users/me'
     })

     // and then calling next()
     next()
   }
  },
  callback.bind(null, strategy)
)

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 24 мая 2019

Мне сложно проверить, но я бы попробовал вернуть ваш вызов на passport.authorize, поскольку именно это в основном и происходит в случае 1.

Как вы прокомментировали, трюк получает next стрелять в нужное время.(И не забудьте позвонить next() в другом предложении.)

Редактировать:
Я сделал еще один выстрел, завернув его во IIFE.Надеясь, что это повторяет то, что происходит в вашем случае 1.

auth.get(
  `/callback/${strategy.name}`,

  // primary difference here: wrapping passport.authorize in function
  function(req, res, next){
    if (strategy.name == 'google') {
      (passport.authorize(strategy.name, {
        failureRedirect: '/error',
        successRedirect: '/users/me'
      })(req, res, next)
    }
    else next() // ??
  },

  callback.bind(null, strategy)
)
...