2015-06-18 8 views
1

В моем серверном коде приложения Node.JS я использую passport.js (v0.2.1, самая последняя версия v0.2.2, но не имеет существенных изменений от v0.2.1 - link) для аутентификации, и у меня также есть ряд маршруты, которые позволяют пользователям подключать свои учетные записи социальной сети, такие как твиттер и facebook.Как перенаправить из паспорта.js разрешить обратный вызов при успешном завершении?

Поскольку пользователь уже зарегистрирован, право passport API функции использовать это authorize, не authenticate:

router.get('/api/connect/facebook/callback', passport.authorize('facebook-connect', { 
    successRedirect: '/profile?message_code=fb_accept', 
    failureRedirect: '/profile?message_code=fb_decline', 
})); 

Этот маршрут называется обратно Facebook после того, как пользователь разрешает или отклоняет разрешения на веб-сайте Facebook: - Если разрешение снижается пользователь, то редирект сбоя называется - Если выдает разрешение пользователя, то редирект успеха не вызывается, а следующий сервер промежуточного слоя называется вместо

passpo В документации rt.js не описывается, как обрабатывать случай успеха. Как перенаправить после успешной авторизации?

ответ

1

Резюме

Успешный авторизированным передает управление следующему промежуточного программного обеспечения, который должен выполнить сам переадресацию.

Detail

Порывшись в паспортный код в lib/authenticator.js, то authorize прототип устанавливает assignProperty на счет:

Authenticator.prototype.authorize = function(strategy, options, callback) { 
    options = options || {}; 
    options.assignProperty = 'account'; 
    var fn = this._framework.authorize || this._framework.authenticate; 
    return fn(this, strategy, options, callback); 
}; 

Поскольку authorize не определен рамках паспорта, код авторизированным падает обратно используя authenticate, как определено в lib/middleware/authenticate.js. В этом методе перенаправление успеха происходит только внутри обратного вызова до req.logIn, которое не вызывается, когда assignProperty является правдивым.

Смежные вопросы