2014-10-01 2 views
2

Я пытаюсь перенаправить пользователя на Личный кабинет после входа в Третью сторону. Но когда выполняется обратный вызов успеха, приложение все еще находится на странице входа, ничего не произошло. Если я обновить браузер мой перехватчик поймать уже войти и изменить в панели управления ... My Controller Войти выглядит следующим образом:

ThirdParty.login(function(result){ 
callbackSUCCESS(result); 
},function(){}); 


function callbackSUCCESS(result){ 
      AuthenticationService.login(result).then(
          callbackServerSUCCESS(), function(reject) { 
           callbackServerERROR(reject); 
          }); 

    } 
function callbackServerSUCCESS() { 

       $scope.$apply(function() { 
        $state.go('dashboard'); 
       }); 
      } 

Мой маршрут в app.js

$stateProvider 
    .state('dashboard', { 
     url: '/dashboard', 
     views: { 
      '': { 
       templateUrl: 'views/dashboard/dashboard.html', 
       controller: 'DashboardCtrl' 
      } 
     } 
    }); 

Мой Заголовок Контроллер

.controller('HeaderCtrl', ['$scope', 'AuthenticationService', '$state', 
     function($scope, AuthenticationService, $state) { 

      $scope.logout = function() { 
       AuthenticationService.logout().then(callbackServer(), callbackServer()); 
      }; 

      function callbackServer() { 
       $state.go('login'); 
      } 
     } 
    ]); 

Authentication контроллер Угловая завод

var headersConfig = { 
    'Cache-Control': 'no-cache', 
    'Pragma': 'no-cache' 
}; 

return { 
    login: function(credentials) { 
     var deferred = $q.defer(); 

     $http.post('/api/users/sign_in', sanitizeCredentials(credentials), { 
      headers: headersConfig, 
      timeout: deferred.promise 
     }).then(function(result) { 
      if (result.status === 200) { 
       UserSessionService.cacheSession(result.data); 
       deferred.resolve(); 
      } else { 
       deferred.reject(); 
      } 
     }, function(reject) { 
      UserSessionService.clean(); 
      deferred.reject(reject); 
     }); 

     $timeout(function() { 
      deferred.resolve(); 
     }, 15000); 

     return deferred.promise; 
    } 
}; 
+0

Моей третьей стороны, например. GitHub. Flux: страница входа в систему -> git auth-> мой вход в сервер -> панель мониторинга – user2258959

+0

Если вы наберете URL-адрес в адресной строке, вы увидите страницу своей панели? –

+0

Нет, когда я перезагружаю страницу, а затем перейду на http: // localhost: 9000/dashboard – user2258959

ответ

1

Я не помню точную семантику $state.go, но обычно вам нужно использовать $scope.$apply в некотором роде, когда реагирует на события. Угловой не знает, чтобы обеспечить цикл дайджест. То есть Вы можете попробовать:

ThirdParty.login(function(result) { 
    $scope.$apply(function() { 
     $state.go('dashboard'); 
    }); 
}, function() {}); 

Вы должны получить ссылку на объем где-то, но не должно быть трудно найти в угловом приложение.

+0

Я получил ссылку на область действия, но не произошло. И консольный бросок: $ применяются уже в стадии разработки – user2258959

+0

Вы имеете в виду, что вы пробовали этот код, и это не сработало? Любые ошибки в консоли? –

+0

В знаке ничего не произошло, поэтому я перезагружаю страницу для входа в систему, затем я попробовал выйти и консольный бросок: Ошибка: [$ rootScope: inprog] $ apply уже выполняется http://errors.angularjs.org/1.2. 25/$ rootScope/inprog? P0 =% 24apply at VALIDITY_STATE_PROPERTY (http: // localhost: 9000/bower_components/angle/angular.js: 78: 12) at beginPhase (http: // localhost: 9000/bower_components/angleular /angular.js:13009:15) – user2258959

0

Избавьтесь от обоего () в

then(callbackServer(), callbackServer()) 
Смежные вопросы