Паспорт-facebook: как динамически установить callbackURL?

Я следую этому примеру, чтобы настроить FacebookStrategy - https://github.com/jaredhanson/passport-facebook/blob/master/examples/login/app.js

Я хочу установить callbackURL динамически, т.е.: пользовательский доступ/сообщения/34, поэтому обратный вызов будет /posts/ 34/callback

как я могу добиться чего-то подобного?

Ответы

Ответ 1

Я нашел решение, как для маршрута перенаправления авторизации, так и для маршрута обратного вызова, должен завернуть файл passport.authenticate() с функцией (req, res, next).

Я выполнил пример в http://passportjs.org/guide/authenticate/ для пользовательского обратного вызова

и комментарии в https://github.com/jaredhanson/passport-facebook/issues/2 для пользовательского callbackURL

Ответ 2

Я использую это решение, это довольно легко. Я сохраняю последний URL-адрес в сеансе и собираю его позже. Если вы передаете URL-адрес обратного вызова напрямую, вам нужно разрешить все различные маршруты, которые довольно опасны.

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

Обратите внимание, что вам нужно специально зарегистрировать пользователя.