Прошу прощения, этот вопрос получился немного длинным, но я работал над этим в течение некоторого времени и действительно нуждался в объяснении всей истории.Passport.js, Express.js и Angular.js routing: как они могут сосуществовать?
фон: App на основе стека MEAN, пытаясь разрешить логинов Facebook с помощью Passport.js.
После Passport.js guide я осуществил что-то похожее на:
// HTML
<a href="/connect/facebook" target="_self">Add a Facebook login</a>
// send to facebook to do the authentication
app.get('/connect/facebook',isLoggedIn, passport.authorize('facebook',
{ scope : 'email' })
);
// handle the callback after facebook has authorized the user
app.get('/connect/facebook/callback',
passport.authorize('facebook', {
successRedirect : '/profile',
failureRedirect : '/profile'
}));
Обратите внимание на target=_self
в HTML, чтобы пропустить Угловое маршрутизации. Очевидно, что авторизация работает нормально. Однако перенаправление не работает, так как маршрутизация обрабатывается угловым. После авторизации я никогда не приземляюсь на /profile
(но по Угловому маршруту по умолчанию).
Поэтому я пробовал с пользовательским обратным вызовом, как это было предложено Passport.js here, с надеждой передать данные json в Angular и позволить Angular выполнять маршрутизацию. Я закончил что-то вроде:
// In the controller
$http.get("/connect/facebook").success(function(data){
// here I wait for json data from the server and do the routing
});
// I call this route from Angular
app.get('/connect/facebook',isLoggedIn,passport.authorize('facebook',
{ scope : 'email' })
);
// But Facebook lands here!
app.get('/connect/facebook/callback',function(req, res, next) {
passport.authorize('facebook', function(err, user, info) {
res.json({something:smtg});
...
Очевидно, пользовательские обратные вызовы работают для локального входа, как объясняет Passport.js. Но вот вы видите проблему? Я звоню /connect/facebook
из Angular, но я должен получить json от /connect/facebook/callback
.
Я собираюсь отказаться от паспорта, но до этого вы видите какое-либо решение, которое позволит посадку на /profile
после авторизации FB, возможно, с помощью специального сообщения? Большое спасибо за чтение.
EDIT: Тот же вопрос был сообщен как вопрос о Passport-Facebook GitHub account. Некоторые дополнительные попытки были опубликованы там, но не совсем исправлены.
Как это Перенаправление перехвачены Угловая? У вас есть маршрут '/ profile ', определенный в вашем приложении Express? Что он служит? – laggingreflex
У меня есть маршрут '/ profile' в режиме Angular, no'/profile' в Express и 'app.get ('*', ..)' route в Express. Он служит маршруту по умолчанию в угловом: '.otherwise ({redirectTo: '/'});'. Любая попытка использовать 'res.render' или' res.redirect (в определенном угловом виде) 'из Express является напрасной. – ZzKr