我将按照这个示例来设置一个FacebookStrategy - https://github.com/jaredhanson/passport-facebook/blob/master/examples/login/app.js
我希望动态设置callbackURL,即:用户访问/posts/34,这样回调就是/posts/34/callback
我怎么才能实现这样的事情呢?
发布于 2013-01-02 17:01:03
我找到了解决方案,身份验证重定向路由和回调路由都应该用函数(req,res,next)包装passport.authenticate()。
我遵循了http://passportjs.org/guide/authenticate/中的自定义回调示例
以及自定义callbackURL的https://github.com/jaredhanson/passport-facebook/issues/2中的注释
发布于 2016-10-12 23:14:42
我使用这个解决方案,它非常简单。我保存会话中的最后一个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发布于 2017-04-26 23:17:55
根据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)
})请注意,您必须专门让用户登录。
https://stackoverflow.com/questions/14111850
复制相似问题