我的 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/