2015-04-21 3 views
1

Это мой код для реализации в моем приложении процедуры входа в систему. Приложение должно проверить cookie, установленное сервером, и продолжить процедуру входа, перенаправив пользователя в состояние холста. Моя проблема в том, что я получил вышеупомянутую ошибку. На самом деле это работает, что логин сделан успешно, но я хотел бы избавиться от этой ошибки. Я предполагаю, что ошибка должна быть в $ stateChangeStart, но я не знаю, как ее исправить. Есть идеи?10 digest() Итерация достигла ошибки в процедуре входа в систему

(function() { 
    'use strict'; 

    angular 
    .module('app', [ 
     'ui.router', 
     'ngResource', 
     'ngCookies', 
     'app.login' 
    ]) 
    .config(function($stateProvider, $urlRouterProvider){ 
     $urlRouterProvider.otherwise('/login'); 
    }) 
    .run(function($rootScope, AuthService, RedirectService) { 
     $rootScope.$on('$stateChangeStart', function(event, toState) { 
     if (!AuthService.isAuthenticated()) { 
      // the user isn't authenticated 
      event.preventDefault(); 
      // redirect to the server side 
      RedirectService.redirectToAuth(); 
     } 
     }); 
    }); 
})(); 




(function() { 
    'use strict'; 

    angular 
    .module('app.login') 
    .factory('AuthService', Auth); 

    Auth.$inject = ['Cookie', 'Session']; 

    function Auth(Cookie, Session) { 

    return { 
     login: function(params) { 
     // here set the session with params passed by the server 
     Session.create(params.id, params.data.id, params.data.make, params.data.name); 
     }, 
     isAuthenticated: function() { 
     // check cookie here set in the server side 
     return Cookie.exist(); 
     } 
    }; 

    } 

})(); 


(function() { 
    'use strict'; 

    angular 
    .module('app.login') 
    .service('Cookie', Cookie); 

    Cookie.$inject = ['$cookies']; 

    function Cookie($cookies) { 

    this.authCookie = $cookies.__cookie; 

    this.exist = function() { 
     return (this.authCookie ? true : false); 
    }; 
    } 
})(); 

(function() { 
    'use strict'; 

    angular 
    .module('app.login') 
    .factory('RedirectService', Redirect); 

    Redirect.$inject = ['$window']; 

    function Redirect($window) { 

    return { 
     redirectToAuth: function() { 
     // redirect the user to the server for auth 
     $window.location.href = "http://" + $window.location.host + "/auth/facebook"; 
     } 
    }; 
    } 
})(); 


(function() { 
    'use strict'; 

    angular 
    .module('app.login') 
    .controller('LoginController', Login); 

    // here inject what function Login needs 
    Login.$inject = ['$rootScope', '$scope', '$state', '$stateParams', 'AuthService']; 

    function Login($rootScope, $scope, $state, $stateParams, AuthService) { 

    var params = { 
     id: $stateParams.userid, 
     data: { 
     id: $stateParams.modelid, 
     make: $stateParams.modelmake, 
     name: $stateParams.modelname 
     } 
    }; 

    $scope.login = function(params) { 
     AuthService.login(params); 
     // activate the canvas state 
     $state.go('canvas'); 
    }; 

    // run the login function to set the Session user with data passed by the server 
    $scope.login(params); 
    } 
})(); 
+0

хотя он должен был исправить, но я использовал 301 переадресацию с сервера, и я лично считаю, что его очиститель жестко перезагрузит браузер. – YOU

+0

можете ли вы привести пример? – Mazzy

+0

Я использую генератор углового ползуна - https://github.com/DaftMonk/generator-angular-fullstack/blob/master/app/templates/server/auth(auth)/auth.service.js#L70 – YOU

ответ

1

Может быть, это может помочь немного больше:

/* 
We are using the below urlRouterProvider.otherwise() because of: 
https://github.com/angular-ui/ui-router/issues/600 
*/ 
$urlRouterProvider.otherwise(function($injector, $location) { 
    var $state = $injector.get('$state'); 
    $state.go('login'); 
}); 

С помощью этого кода вы можете использовать otherwise(), недостатком использования when() является что другие неизвестные маршруты не совпадают. Над кодом были решены все наши бесконечные петли.

0

Исправлена ​​ошибка

$urlRouterProvider.otherwise('/login'); 

причиненный весь этот вопрос.

удалить его и заменен, когда() решается вопрос