javascript - Angular js : How to always show modal login dialog if any REST API fails due to authentication

标签 javascript angularjs modal-dialog

我的 Angular JS 应用程序用于电子商务用例。会有几个页面,其中一些数据将从一些需要身份验证的 REST API 中获取(有些不需要身份验证)。如果身份验证失败(用户未登录),API 都会以特殊的 error_code 进行响应(例如“AUTH_FAIL”)。

我的要求是,如果任何 API 由于身份验证而失败,则该页面中应出现一个登录模式表单对话框。该模式表单包含用户名和密码字段。如果登录成功,模式窗口应该关闭,并且当前路由应该重新刷新。

我了解如何针对特定路由/ Controller 执行此操作。然而,由于有很多这样的页面需要这样做,我无法想出一种可以轻松利用同一段代码的方法,因为在我看来,这似乎是一个常见的要求。如何才能做到,或者如果不能,最好的解决办法是什么?

最佳答案

您可以使用拦截器来实现此目的。拦截器可用于全局错误处理、身份验证或任何类型的同步或异步请求预处理或响应后处理。

例如,我使用以下代码在身份验证失败时重定向用户登录。

.factory('myInterceptor', ['$q', '$location', '$injector', function ($q, $location, $injector) {
    return {
        response: function (response) {
            return response || $q.when(response);
        },
        responseError: function (rejection) {
            if (rejection.status === 401) {
                var stateService = $injector.get('$state');
                stateService.go('login');
            }
            return $q.reject(rejection);
        }
    }
}])
.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.interceptors.push('myInterceptor');
}]);

关于javascript - Angular js : How to always show modal login dialog if any REST API fails due to authentication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47599594/

相关文章:

javascript - 如何固定箭头的位置不依赖于 Jquery 工具提示中的内容?

javascript - meteor 集合插入允许抛出错误

angularjs - 使用 JSONP 找不到 JSON_CALLBACK

angularjs - 在angular.js应用程序中注册服务 worker

javascript - Mobx Reactjs 对我不起作用(我无法注入(inject)我的商店)

javascript - 使用 Hammer.js 进行捏合缩放

angularjs - 使用 multer、ng-file-upload、Angular 和 Node 上传多个文件,并将动态表单数据绑定(bind)到每个文件

modal-dialog - ReactJs:使用 Portal 包装语义 UI 模态 "pattern"

jquery - 如果未完成所有表单步骤,则重置 Bootstrap Modal

javascript - 如何通过 URL 属性创建 JavaScript 操作?