/ / passport-facebook: como definir dinamicamente o callbackURL? - node.js, express, passport.js

passport-facebook: como definir dinamicamente o callbackURL? - node.js, express, passport.js

Estou seguindo este exemplo para configurar uma FacebookStrategy - https://github.com/jaredhanson/passport-facebook/blob/master/examples/login/app.js

Eu quero definir o callbackURL dinamicamente, ou seja: o usuário acessa / posts / 34 para que o retorno seja / posts / 34 / callback

como posso conseguir algo assim?

Respostas:

7 para resposta № 1

Eu encontrei a solução, tanto a rota de redirecionamento de autenticação quanto a rota de retorno de chamada devem envolver passport.authenticate () com a função (req, res, next).

Eu segui o exemplo em http://passportjs.org/guide/authenticate/ para retorno de chamada personalizado

e os comentários em https://github.com/jaredhanson/passport-facebook/issues/2 para callbackURL personalizado


3 para resposta № 2

Eu uso esta solução, é bastante fácil. Eu salvo o último URL da sessão e o coleciono depois. Se você passar o URL de retorno de chamada para fb diretamente, precisará permitir todas as rotas diferentes, o que é bastante complicado.

  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

1 para resposta № 3

Apenas acompanhando a resposta de Gal, aqui está a solução combinada:

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)
})

Observe que você precisa efetuar logon específico do usuário.