Проверка подлинности AngularFire с помощью маршрутизаторов ошибка цикла $digest

#firebase #angularfire

#firebase #angularfire

Вопрос:

Я работаю над простым приложением, использующим AngularFire, и некоторые маршруты защищены с помощью примера пользовательского интерфейса-маршрутизатора из руководства AngularFire.

Когда URL-адрес пуст, ui-router обрабатывает его с $urlRouterProvider.when('/', '/account'); помощью . Но когда URL-адрес перенаправления защищен, как:

 .state('account', {
                    controller: 'AccountCtrl',
                    controllerAs: 'vm',
                    url: '/account',
                    templateUrl: 'app/account/account.html',
                    data: {
                        title: '- Account'
                    },
                    resolve: {
                        'currentAuth': ['Auth', function(Auth) {
                            return Auth.$requireSignIn();
                        }]
                    }
                })
  

выдается ошибка, приведенная ниже:

 Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
  

Пожалуйста, не могли бы вы помочь мне с этой досадной ошибкой?

Ответ №1:

Добавить

event.preventDefault ()

для остановки начального состояния

 if (error === "AUTH_REQUIRED") {
    //halt default event then initiate state go to new nested page
    event.preventDefault();

    // as of now, we go to login until landing template is up
    $state.go("home");
 }
  

Комментарии:

1. Метод preventDefault() отменяет событие, если его можно отменить, что означает, что действие по умолчанию (состояние goto ‘account’), относящееся к событию, не произойдет. пользовательский интерфейс-маршрутизатор запускает события синхронизации. Ваши коды перейдут в оба состояния «учетная запись» и «главная», даже если будет выдана ошибка AUTH_REQUIRED. Из-за этого у вас будет бесконечное количество ошибок «AUTH_REQUIRED». Поэтому используйте этот код, чтобы остановить состояние учетной записи

Ответ №2:

Auth.$requireSignIn выдаст ошибку AUTH_REQUIRED . Вы можете попытаться перенаправить в нужное состояние, отслеживая $stateChangeError , где AUTH_REQUIRED обнаружена ошибка.

 // for ui-router
app.run(["$rootScope", "$state", function($rootScope, $state) {
  $rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error) {
    // We can catch the error thrown when the $requireSignIn promise is rejected
    // and redirect the user back to the home page
    if (error === "AUTH_REQUIRED") {
      $state.go("home");
    }
  });
}]);
  

Комментарии:

1. проблема не в этом. У меня есть этот фрагмент кода в моем проекте.

2. получите это, надеюсь, мой второй ответ поможет вам.