2016-04-12 3 views
0

Немного истории назад.AngularJS Resolve Promise. Перенаправление, если обещание отклонено

  • У меня есть публичные страницы, не ограничивается
  • У меня есть личные страницы, ограниченные, которые требуют Войти.
  • Я использую Firebase Authentication для входа.

У меня есть мой $routeProvider установить в моем .config() из моих главных .module() Моих ограниченных путей выглядеть следующим образом.

.when('/admin', { 
      controller: 'adminCtrl as admin', 
      templateUrl: 'pages/admin/dashboard.tpl.html', 
      resolve: { 
       "currentAuth": ["$firebaseAuth", function($firebaseAuth) { 
        //$requireAuth returns a promise if authenticated, rejects if not 
        var ref = new Firebase(fbUrl); 
        var authObj = $firebaseAuth(ref); 

        return authObj.$requireAuth(); 
       }] 
      } 
     }) 

Мой вопрос о решимости конкретно, я предполагаю, что она работает правильно, потому что я не вижу в templateUrl на моем браузере. (Я знаю это по факту, я удалил возврат и разместил return true, и появился мой шаблонUrl)

Итак, прямо сейчас это обещание в решении отклоняется. Поскольку я не являюсь зарегистрированным пользователем.

Вопрос в том, как я либо. отправьте $routeProvider на мой .otherwise маршрут или b. поместите перенаправление в решении, если обещание будет отклонено.

В принципе, если пользователь не вошел в систему, я хочу, чтобы они были отправлены обратно на домашнюю страницу. Сейчас браузер просто показывает пустую страницу.

ответ

0

После еще несколько исследований (сейчас я понимаю, что мне нужно копать еще, извините, не повторится.)

Я нашел решение, добавив .run() к моему заявлению.

.run(function($rootScope, $location) { 
    $rootScope.$on("$routeChangeError", function(event, current, previous, eventObj) { 
     console.log(eventObj); 
     if (eventObj === 'AUTH_REQUIRED') { 
      $location.path("/"); 
     } 
    }); 
}) 

Это захватывает мой routeChangeError и перенаправляет, когда у меня есть ошибки AUTH_REQUIRED.

Простой.

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