寻找关于为何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)
)
第二种情况:
任何帮助将不胜感激。
答案 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)
)