passport-facebook:如何dynamic设置callbackURL?

我按照这个例子来设置一个FacebookStrategy – https://github.com/jaredhanson/passport-facebook/blob/master/examples/login/app.js

我想dynamic地设置callbackURL,即:用户访问/ posts / 34,所以callback将是/ posts / 34 / callback

我怎么能做到这样的事情?

我发现解决scheme,authredirect路由和callback路由都应该用函数(req,res,next)包装passport.authenticate()。

我遵循http://passportjs.org/guide/authenticate/中的示例进行自定义callback

并在https://github.com/jaredhanson/passport-facebook/issues/2中的意见自定义callbackURL

我使用这个解决scheme,这很容易。 我保存会话中的最后一个URL,然后收集。 如果您直接将回叫url传递给fb,您需要允许所有不同的路线,这是非常令人头疼的。

app.get '/auth/facebook/', routesService.clean, (req, res, next) -> req.session.redirect = req.query.redirect if req.session? && req.query.redirect? passport.authenticate('facebook', { scope: ['user_friends'] }) req, res, next return app.get '/auth/facebook/callback', passport.authenticate('facebook', failureRedirect: '/login'), (req, res) -> # Successful authentication, redirect home. if req.session?.redirect? rediredUrl = req.session.redirect delete req.session.redirect res.redirect '/#!'+ rediredUrl else res.redirect '/' return 

只要跟随Gal的回答,下面是这个组合的解决scheme:

 app.get('/auth/facebook', (req, res, next) => { passport.authenticate('facebook')(req, res, next) }) app.get("/auth/facebook/callback", (req, res, next) => { passport.authenticate('facebook', (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.uid) }); })(req, res, next) }) 

请注意,您必须专门login用户。