Я пытаюсь настроить вход в AngularFire с потоком OAuth на основе перенаправления в моем веб-приложении AngularJS с бэкэндом FireBase. Я использую AngularJS 1.3.14, Firebase 2.2.3 и AngularFire 1.0.0.
Я попытался настроить базовый пример, чтобы выполнить аутентификацию самым простым способом, следуя документам библиотеки AngularFire: https://www.firebase.com/docs/web/libraries/angular/api.html#angularfire-users-and-authentication
Я завершил настройку аутентификации приложения Google, как описано здесь: https://www.firebase.com/docs/web/guide/login/google.html
В моем контроллере я делаю:
var ref = new Firebase("https://xxxxxxx.firebaseio.com");
$scope.authObj = $firebaseAuth(ref);
а затем следующая процедура привязана к кнопке «Вход» в моем интерфейсе.
$scope.authObj.$authWithOAuthRedirect("google");
Как только я нажимаю кнопку «Войти», меня перенаправляют в Google, где я могу авторизовать свое приложение и войти в свою учетную запись. Затем меня перенаправляют обратно в мое приложение, но я вижу эту ошибку в консоли браузера javascript (Chrome):
Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.3.14/$rootScope/infdig?p0=10&p1=%5B%5D
at REGEX_STRING_REGEXP (angular.js:63)
at Scope.$get.Scope.$digest (angular.js:14281)
at Scope.$get.Scope.$apply (angular.js:14506)
at bootstrapApply (angular.js:1448)
at Object.invoke (angular.js:4185)
at doBootstrap (angular.js:1446)
at bootstrap (angular.js:1466)
at angularInit (angular.js:1360)
at angular.js:26176
at HTMLDocument.trigger (angular.js:2744)
Я не могу понять, почему это происходит и как решить. Похоже, что во время начальной загрузки AngularJS происходит какой-то цикл.
Если я заменю свою строку $scope.authObj.$authWithOAuthRedirect("google");
вызовом $authWithOAuthPopup
(точный код см. ниже), все будет работать нормально:
$scope.authObj.$authWithOAuthPopup("google")
.then(function(authData) {
$log.info("Logged in as:", authData.uid);
}).catch(function(error) {
$log.info("Authentication failed:", error);
});
С этим кодом, привязанным к моей кнопке «Войти», появляется всплывающее окно, позволяющее мне войти в систему с помощью Google, а затем я могу прочитать ожидаемое сообщение авторизации в консоли: Logged in as: google:[undisclosed-21-digit-number]
.
Любая помощь, чтобы лучше понять библиотеку аутентификации AngularFire, будет принята с благодарностью. Заранее спасибо.