2013-04-25 3 views
4

Я пытаюсь использовать Passportjs с угловым и выражением. Я пытаюсь проверить стратегию facebook в паспорте.аутентификация пользователя от Angularjs (http get/resource) с использованием Passportjs

Аутентификации, кажется, преуспевают, но не переходят к обратному URL-адресу. Симулятор висит.

Firebug консоль показывает: GET HTTP: // локальный: 7000/авториз/facebook 302 Временно перемещено»

это, однако открывает обратного вызова URL (индекс) успешно в окне браузера, когда я вручную нажмите этот адрес, но не автоматически перенаправлять

мой взгляд входа (нефрит) выглядит, как показано ниже:

a(href='/auth/facebook') 
p Login 

и ServerSide маршрутов:

app.get('/auth/facebook', passport.authenticate('facebook')); 
app.get('/auth/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/login' }), 
function(req, res) { 
res.render('index'); 
}); 

Просьба помочь. Это мой первый опыт работы с Angularjs & Node JS

EDIT: Чтобы быть более точным, то проблема возникает только тогда, когда мой запрос со стороны клиента (страницы входа в Угловое) на мой экспресс-сервер. Нет проблем, если я обслуживаю страницу входа в экспресс. Аутентификация проходит через штраф и перенаправляет на мою заявку, как ожидалось.

Можем ли мы сделать запрос на аутентификацию с клиентской стороны (используя http get/post) на сервер, пока сервер обрабатывает аутентификацию с использованием паспортных данных?

ответ

1

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

За кулисами Стратегия Facebook PassportJS использует OAuth. Используя этот подход, он выгружает всю аутентификацию на серверы Facebook. Когда вы нажимаете ссылку с помощью href = "/ auth/facebook", ваш экспресс-сервер перенаправляет пользователя на Facebook, а затем обратно в ваше приложение. Это необходимо сделать, чтобы обеспечить безопасную аутентификацию, иначе кто-то может утверждать, что они являются Facebook и сами «аутентифицируют» пользователей. Именно поэтому вызов Angular $ http.get ("/ auth/facebook") не сработает, он просто вернет перенаправление 302.

К сожалению, это становится сложной задачей. Если вы просто включаете ссылку с href "/ auth/facebook", сервер будет аутентифицировать пользователя и вернуться в ваше приложение, но у Angular нет возможности узнать, что ваш пользователь аутентифицирован. Я нашел пример углового oauth здесь https://github.com/enginous/angular-oauth, но у меня есть проблемы с его перевариванием. По сути, он использует всплывающее окно для открытия ссылки аутентификации в вашем случае «/ auth/facebook» и с помощью браузера $ window.postMessage, чтобы связаться с его основным окном приложения с помощью токена доступа, который он получил после аутентификации пользователя а затем закрыть всплывающее окно.

Я думаю, что это может быть лучший подход, но я до сих пор не получил эту работу с Паспортом. Хотелось бы услышать некоторые другие идеи/мнения, поскольку я все еще новичок в Angular!

ОБНОВЛЕНИЕ: Я недавно наткнулся на это сообщение в блоге http://www.frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/, в котором показан пример использования стратегии Passport's Facebook с Angular. Кажется, он настроил cookie после успешной проверки подлинности и получил опрос Angular для файла cookie на загрузке страницы. Это может быть более легкое решение.

0

Я столкнулся с той же проблемой, проблема заключалась в том, как угловой посылает запрос. Я начал с использования $http.get, который дошел до моего узла, но, как вы сказали, повесился там. , когда я переключился на $window.location.href, он работал отлично, так как этот req мог быть прикован.

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