AngularFire $ requireAuth未检测到过期的身份验证

时间:2016-08-30 01:23:52

标签: angularjs firebase angularfire firebase-authentication

在我搜索这个问题时,我发现the following让我相信这不应该是一个问题所以我确定我做错了什么但是无法解决这个问题。

有时候,当我的身份验证过期后导航到我的应用程序时,它会加载页面而不是重定向到/ login,在控制台中我看到:

Error: permision denied at /the/firebase/url: Client doesn't have permission to access the desired data

如果我重新加载页面,我将按预期成功定向到/登录。

angular.module('app',['firebase','ngRoute','ngAnimate','ui.bootstrap'])
    .factory("Auth",function($firebaseAuth){
        var ref = new Firebase("https://app.firebaseio.com");
        return $firebaseAuth(ref);
    })
    .run(['$rootScope','$location','$window',function($rootScope,$location,$window){
        $rootScope.$on('$routeChangeError',function(event,next,previous,error){
            $location.path('/login');
        });

        if($window.localStorage.getItem('app-last-list')) {
            $location.path('/lists/' + $window.localStorage.getItem('app-last-list'));
        }

    }])
    .config(['$routeProvider',function($routeProvider){
        $routeProvider
            .when('/',{
                templateUrl: 'views/list-view.html',
                controller: 'ListViewController',
                resolve: {
                    "currentAuth": ['Auth', function(Auth) {
                        return Auth.$requireAuth();
                    }]
                }
            })
            .when('/login',{
                templateUrl: 'views/login-view.html',
                controller: 'LoginController'
            })
            .when('/lists/:id', {
                templateUrl: 'views/list-items-view.html',
                controller: 'ListItemsController',
                resolve: {
                    "currentAuth": ['Auth',function(Auth){
                        return Auth.$requireAuth();
                    }],
                    "list": ['$route','dao',function($route,dao){
                        return dao.getPrivateList($route.current.params.id).$loaded();
                    }],
                    "items": ['$route','dao',function($route,dao){
                        return dao.getListItems($route.current.params.id).$loaded();
                    }]
                }
            })
            .otherwise( {redirectTo: '/' });
    }]);

1 个答案:

答案 0 :(得分:0)

您是否在运行块中处理$ routeChangeError事件以告诉它重定向?

.run(function($rootScope, $location) {
    $rootScope.$on("$routeChangeError", 
        function(event, current, previous, eventObj) {
            if (eventObj === 'AUTH_REQUIRED') {
                console.log('auth required!');
                $location.path("/login");
            }
        }
    );
})