Angularjs inifinity在AngularFire身份验证上消化循环

时间:2016-10-20 13:32:25

标签: angularjs firebase-authentication angularfire angular-digest

帮助!我想知道如何阻止它?使用角度ui-router& amp;后,我遇到了无限消化循环的问题。 angularFire。我发现循环不断下降到$ stateChangeStart甚至调用登录状态。这是我的控制台日志。

1476969257159 Start:   {} -> dashboard{}
Auth errorAUTH_REQUIRED
1476969259545 Start:   {} -> login{}
1476969260671 Start:   {} -> dashboard{}
Auth errorAUTH_REQUIRED
1476969263828 Start:   {} -> login{}
1476969266255 Start:   {} -> dashboard{}

我用这种方式编码我的ui-router

$rootScope.$on("$stateChangeError",function (ev,toSt,toPa,fromSt,fromPa,error) {
 // We can catch the error thrown when the $requireSignIn promise is rejected
    console.log("Auth error" + error);
    if (error === "AUTH_REQUIRED") {
         $state.go("login");
    }
 });

并且

$urlRouterProvider
    .when('/', '/dashboard')
    .when('','/')
    .otherwise('/404');

我拥有的国家,

$stateProvider
    .state('dashboard', {
    url: '/dashboard',
    controller: 'dashboardCtrl',
    templateUrl: 'templates/dashboard/dashboard.html'
    resolve: {
    // controller will not be loaded until $requireSignIn resolves
    // Auth refers to our $firebaseAuth wrapper in the factory below
    "currentAuth": ["wifAuth", function(wifAuth) {
        // console.log ("dashboard check");
        // $requireSignIn returns a promise so the resolve waits for it to complete
        // If the promise is rejected, it will throw a $stateChangeError (see above)
            return wifAuth.$requireSignIn();
            }]
        }
    })

    .state('login',{
    url: '/login',
    templateUrl: 'templates/auth/login.html',
    resolve: {
    // controller will not be loaded until $waitForSignIn resolves
    // Auth refers to our $firebaseAuth wrapper in the factory below
    "currentAuth": ["wifAuth", function(wifAuth) {
        // console.log ("login check");
        // $waitForSignIn returns a promise so the resolve waits for it to complete
            return wifAuth.$waitForSignIn();
            }]
        }
    })

1 个答案:

答案 0 :(得分: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("landing");
    // $state.go("login");
 }