Pytanie paszport-facebook: jak dynamicznie ustawić callbackURL?


Podążam za tym przykładem, aby skonfigurować FacebookStrategy - https://github.com/jaredhanson/passport-facebook/blob/master/examples/login/app.js

Chcę ustawić dynamicznie callbackURL, tj .: dostęp użytkownika / posty / 34, więc wywołanie zwrotne będzie / post / 34 / wywołanie zwrotne

jak mogę osiągnąć coś takiego?


16
2018-01-01 15:57


pochodzenie




Odpowiedzi:


Znalazłem rozwiązanie, zarówno auth przekierowanie trasy i trasy wywołania zwrotnego powinny zawijać passport.authenticate () z funkcją (req, res, następny).

Podążyłem za przykładem w http://passportjs.org/guide/authenticate/ dla niestandardowego oddzwaniania

i komentarze w https://github.com/jaredhanson/passport-facebook/issues/2 dla niestandardowego callbackURL


8
2018-01-02 09:01





Korzystam z tego rozwiązania, jest całkiem proste. Zapisz ostatni adres URL w sesji i odbierz go później. Jeśli przełączysz adres URL wywołania zwrotnego na fb bezpośrednio, musisz zezwolić na wszystkie różne trasy, które są dość mgliste.

  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

4
2017-10-12 15:14





Podążając za odpowiedzią Gal, oto połączone rozwiązanie:

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

Zwróć uwagę, że musisz specjalnie zalogować użytkownika.


1
2018-04-26 15:17