包装护照时request.account存在。使用匿名功能授权

时间:2019-05-23 18:03:18

标签: node.js express passport.js

寻找关于为何req.account的属性callback.bind()在调用passport.authorize()期间创建的原因对于下游中间件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 :(得分:0)

我很难测试,但我会尝试将您的呼叫返回给passport.authorize,因为这实际上是情况1发生的情况。

正如您所评论的,诀窍是在适当的时间触发next。 (并且不要忘记在else子句中调用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)
)