【问题标题】:AngularJs routeProvider http status 403AngularJs routeProvider http状态403
【发布时间】:2014-09-22 09:30:46
【问题描述】:

我正在服务器端进行身份验证和授权。

在 angularJs 中,我正在使用这样的 routeProvider 进行路由。

$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: '/'
        });

这是要解决的问题,当我得到一个 403 角度没有显示服务器页面时,它什么也不做。

有人对如何处理这个问题提出了建议吗?

【问题讨论】:

  • 错误 403“禁止执行访问” – 尝试打开 URL /test/partials/_userForm – 你有什么回应?它与 AngularJS 没有任何共同之处,它是你的服务器。如果 403 发生,你对 Angular 有什么期望?重定向到某个登录页面?
  • 是的,这是服务器响应,我想要的是显示那个 403 错误页面的内容。但是当出现该错误时,角度没有显示任何内容。
  • 您要显示此模板或处理错误 403?
  • 我的服务器提供的403错误页面。
  • 我遇到了同样的错误,但我想展示模板,处理这种情况的最佳做法是什么?

标签: javascript security http-status-code-403 angularjs-routing


【解决方案1】:

AngularJS 拦截器 - 更新到 v1.4.2

拦截器是通过将它们添加到 $httpProvider.interceptors 数组而向 $httpProvider 注册的服务工厂。工厂被调用并注入依赖项(如果指定)并返回拦截器。

阅读更多:$http angularjs Doc

部分配置(部分)

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

响应 - 观察者工厂

403.html500.html 是现有的 HTML 文件,样式很好,带有一些用户帮助内容。

.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);
        }
    };
});

扩展有关拦截器的知识:http://djds4rce.wordpress.com/2013/08/13/understanding-angular-http-interceptors/

【讨论】:

  • 很高兴听到这个消息,编码愉快
  • 你不添加$window作为依赖吗?否则,它可以工作。
  • 它就像一个魅力!我使用 $location 而不是 $window
猜你喜欢
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
  • 2016-09-18
  • 2018-07-10
相关资源
最近更新 更多