【问题标题】:passport-facebook: how to dynamically set callbackURL?passport-facebook:如何动态设置回调 URL?
【发布时间】:2012-12-16 05:14:03
【问题描述】:
【问题讨论】:
标签:
node.js
express
passport.js
【解决方案2】:
我使用这个解决方案,这很容易。我将最后一个 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
【解决方案3】:
只是跟进 Gal 的回答,以下是综合解决方案:
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)
})
请注意,您必须专门登录用户。
【解决方案4】:
使用passport js,您只需设置successReturnToOrRedirect
router.get('/facebook/callback', (req, res, next) =>
passport.authenticate('facebook', {
callbackURL: `https://${req.get('host')}/api/auth/facebook/callback`,
successReturnToOrRedirect: req.session.redirect || '/',
failureRedirect: '/',
successRedirect: '/',
})(req, res, next)
);