Аутентификация на Facebook в приложении AngularJS с поддержкой PHP

Я работаю над приложением, которое в основном основано на CRUD. Он написан на PHP и раскрывает себя через JSON API.

Внешний интерфейс написан на AngularJS, и я перехожу к этапу, когда мне нужно разобраться в аутентификации. Я знаю, что хочу, чтобы он был основан на токене, и желательно, чтобы он мог просто войти через Facebook.

Поскольку все данные и т. Д. Находятся на бэкэнде PHP, я предполагаю, что именно здесь должна проходить аутентификация. Моя идея состоит в том, чтобы пользовательский интерфейс AngularJS попросил серверную часть PHP войти в систему, после чего серверная часть отключается и входит в систему с помощью Facebook, сохраняет токен в базе данных и отправляет его обратно на внешний интерфейс AngularJS, чтобы он мог обеспечить это с последующими запросами.

Я немного застрял, когда AngularJS попросил сервер аутентификации. Какой лучший способ справиться с этим? Должен ли я просто иметь ссылку на веб-интерфейс, который отправляет http-запрос на сервер? Но если я сделаю это, как пользователь получит логин в диалоге на Facebook.

Давайте предположим, что мой интерфейс http://front.myapp.com и бэкэнд http://back.myapp.com тогда аутентификация обрабатывается на что-то вроде http://back.myapp.com/auth

Мой вопрос заключается в том, какой код я написал бы на стороне AngularJS, чтобы заставить его правильно общаться с бэкэндом, учитывая, что бэкэнд также должен отключиться и поговорить с Facebook? Реальные примеры кода были бы наиболее полезными.

3

Решение

Я советую вам использовать эту библиотеку http://jberta93.github.io/ng-facebook-api/ и сделайте авторизацию Facebook на вашем веб-интерфейсе. Вы можете легко получить пользовательские данные, а затем с помощью $ http.post вы можете отправить эти данные в ваше бэкэнд-приложение! Тогда, если вам нужно пообщаться с бэкэндом с Facebook, вы можете использовать authResponse, возвращенный из библиотеки в аутентификации веб-интерфейса! Таким образом, в доменах вашего приложения вы указываете только URL внешнего интерфейса. А ваш пользователь не видит бэкэнд-приложение!

Небольшой пример:

$scope.logAndRetriveFacebookUser = function(){
facebook.getUser().then(function(r){
var user = r.user; //User data returned;
var authResponse = r.authResponse; //Token auth, id etc..
$http.post('/backend-login-url', {user:user,authResponse:authResponse});
}, function(err){
console.log("Ops, something went wrong...");
});
}
2

Другие решения

Других решений пока нет …