【发布时间】:2015-06-10 17:32:58
【问题描述】:
我在我的应用程序中使用了 angularjs http 服务,我在 website 中注意到了这一点:
如果 AJAX 调用成功(服务器在 200 和 209),传递给 success() 函数的函数是 执行。如果 AJAX 调用失败(除 重定向),传递给error()方法的函数被执行。
显然,重定向状态代码既不是成功的一部分,也不是错误回调的一部分。那么我们将如何处理重定向呢?
这就是我的脚本所做的,使用 http get 从服务器获取数据。如果会话过期,服务器返回302 状态码。我应该捕获该状态代码,然后将页面重定向到登录。
app.controller('GraphController', function($scope, $http, localStorageService, $interval) {
$scope.GraphData = [{"key":"in","values":[]},{"key":"out","values":[]}];
$scope.pollStats = function() {
$http.get('/statistics/getStat').success(function(lastData, status, headers) {
if (status==302) {
//this doesn't work
//window.location=headers('Location');
//this doesn't work either
window.location.replace(headers('Location'));
}else if (status==200) {
...processData
}
});
};
});
显然我的脚本无法运行,因为成功回调无法处理重定向。那么我们应该如何处理呢?
【问题讨论】:
-
我知道这是一个老问题,但我必须问。您是否尝试实施 OAuth2 重定向?如果是这样,这不是正确的方法,它也不安全。 OAuth2 的部分安全性在于登录是由控制重定向的授权服务器提供的。当您的令牌过期时,您应该只获得 401,然后您知道您需要返回进行身份验证。服务器试图将您重定向到哪里?