2015-04-21 55 views
1

這是我在我的應用程序中實現登錄過程的代碼。應用程序必須驗證服務器設置的cookie,並通過將用戶重定向到畫布狀態來繼續登錄過程。我的問題是,我得到了上述錯誤。其實它的作品是登錄成功,但我想擺脫這個錯誤。我想這個錯誤應該在$ stateChangeStart中,但我不知道如何解決它。任何想法?10摘要()迭代在登錄過程中達到錯誤

(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

我使用angular-fullstack生成器 - 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'); 

使這一切的問題。

刪除,並與()時,解決問題

相關問題