Angular route登录$ requireAuth()

时间:2017-05-24 08:40:07

标签: angularjs firebase angular-ui-router firebase-authentication

我的Auth.$requiredAuth()

有问题
.config(function($stateProvider, $urlRouterProvider){
 $stateProvider.state('cursustext', {
  url: '/cursustext',
  templateUrl: 'views/cursustext/cursustext.html',
  controller: 'cursustextCtrl',
  resolved: {
   "currentAuth": ["Auth", function(Auth){
     return Auth.$requireAuth();
   }]
  }
 })
})

-

.factory('Auth', function($firebaseAuth){
 var auth = $firebaseAuth();
 return auth;
})

问题是:当我没有登录时,我仍然可以访问该页面。

有谁知道如何解决这个问题?

此致 JUR

EDIT / UPDATE

angular.module('myApp.cursustext', ['ui.router'])

.run(["$rootScope", "$state", function($rootScope, $state) {
  $rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error) {
    if (error === "AUTH_REQUIRED") {
      $state.go('home');
    }
  });
}])

.config(function($stateProvider, $urlRouterProvider){
  $stateProvider.state('cursustext', {
    url: '/cursustext',
    templateUrl: 'views/cursustext/cursustext.html',
    controller: 'cursustextCtrl',
    resolve: {
      "currentAuth": ["Auth", function(Auth) {
        return Auth.$requireSignIn();
      }]
    }
  })

现在有效。但是当我没有登录时,不会重定向到主页。如何?

2 个答案:

答案 0 :(得分:1)

错字:

resolved: {
   "currentAuth": ["Auth", function(Auth){
     return Auth.$requireAuth();
   }]
}

应该解决

resolve: { 
   "currentAuth": ["Auth", function(Auth){
     return Auth.$requireAuth();
   }]
}

resolve包含一个或多个依赖项,必须在路由更改之前成功解析,这很可能会阻止解析器强制解析Auth依赖项,这就是为什么您可以在不记录的情况下查看状态的原因。

修改: 要处理错误的情况,你可以这样做:

resolve: { 
   "currentAuth": ["Auth", function(Auth){
      return Auth.$requireAuth().then(function(resp){
        return resp;
      })
      .catch(function(err){
        $location.path('/home'); //redirect to home page in case of error
      })
    }]
}

答案 1 :(得分:1)

嘿,希望你能解决这个问题,无论如何我遇到了同样的问题

stateService.ts:525 Transition Rejection

我通过使用旧版Angular Ui路由器解决了这个问题。

bower install angular-ui-router#0.3.1

最新的Ui路由器在Angularfire Auth示例中存在问题。 干杯