Паспорт-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)
})
Обратите внимание, что вам нужно специально зарегистрировать пользователя.