Search code examples
javascriptsecurityhttp-status-code-403angularjs-routing

AngularJs routeProvider http status 403


I'm doing authentication and authorization in the server side.

In angularJs I'm doing the routing using the routeProvider like this.

$routeProvider.
        when('/', {
            templateUrl: 'partials/_home',
            controller: 'HomeCtrl'
        }).
        when('/home', {
            templateUrl: 'partials/_home',
            controller: 'HomeCtrl'
        }).
        when('/users', {
            templateUrl: 'partials/_users',
            controller: 'UserCtrl'
        }).
        when('/users/:id', {
            templateUrl: 'partials/_userForm',
            controller: 'UserCtrl'
        }).
        otherwise({
            redirectTo: '/'
        });

And here is the problem to solve, when I get a 403 angular is not showing the server page, it just does not do nothing.

enter image description here

Did some one has a suggestion of how to handle this?


Solution

  • AngularJS Interceptors - updated to v1.4.2

    The interceptors are service factories that are registered with the $httpProvider by adding them to the $httpProvider.interceptors array. The factory is called and injected with dependencies (if specified) and returns the interceptor.

    To read more: $http angularjs Doc

    Section config (part of it)

    .config(function ($httpProvider) {
        $httpProvider.interceptors.push('responseObserver');
    })
    

    Response - observer factory

    403.html and 500.html are existing HTML files, nice styled with some help content for user.

    .factory('responseObserver', function responseObserver($q, $window) {
        return {
            'responseError': function(errorResponse) {
                switch (errorResponse.status) {
                case 403:
                    $window.location = './403.html';
                    break;
                case 500:
                    $window.location = './500.html';
                    break;
                }
                return $q.reject(errorResponse);
            }
        };
    });
    

    To extend knowledge about interceptors: http://djds4rce.wordpress.com/2013/08/13/understanding-angular-http-interceptors/