我如何在 angularjs 拦截器中重定向,除非没有错误?
How do I redirect in angularjs interceptor, except not on error?
我想检查是否存在 CSRF cookie 令牌,如果不存在,则重定向到登录。
但是没有 cookie 不会触发 requestError
,所以我不能把它放在那里。
我确定我可以简单地将其粘贴在 request
中,但我想这样做 'cleanly' 而不是会导致大量错误的脏重定向控制台,因为我正在重定向中间承诺链。
注意:我没有使用 angular 来管理身份验证。我只是让后端通过营销网站上的标准 POST 表单来处理该问题。这就是为什么它使用 window.location.href
而不是 $location.path()
.
$httpProvider.interceptors.push(function($q, $cookies) {
return {
request: function(config) {
if ($cookies.get(xsrfCookieName) && $cookies.get(tokenCookieName)) {
return config;
} else {
// can I do something here to redirect cleanly?
}
},
responseError: function(rejection) {
if (rejection.status === 401) {
window.location.href = '/login';
}
return $q.reject(rejection);
}
};
});
来自 docs(强调我的):
requestError: interceptor gets called when a previous interceptor
threw an error or resolved with a rejection.
因此您可以拒绝并从您的 request
创建状态为 401 的拒绝:
$httpProvider.interceptors.push(function($q, $cookies) {
return {
request: function(config) {
if ($cookies.get(xsrfCookieName) && $cookies.get(tokenCookieName)) {
return config;
} else {
return $q.reject({
status: 401
});
}
},
responseError: function(rejection) {
if (rejection.status === 401) {
window.location.href = '/login';
}
return $q.reject(rejection);
}
};
});
我想检查是否存在 CSRF cookie 令牌,如果不存在,则重定向到登录。
但是没有 cookie 不会触发 requestError
,所以我不能把它放在那里。
我确定我可以简单地将其粘贴在 request
中,但我想这样做 'cleanly' 而不是会导致大量错误的脏重定向控制台,因为我正在重定向中间承诺链。
注意:我没有使用 angular 来管理身份验证。我只是让后端通过营销网站上的标准 POST 表单来处理该问题。这就是为什么它使用 window.location.href
而不是 $location.path()
.
$httpProvider.interceptors.push(function($q, $cookies) {
return {
request: function(config) {
if ($cookies.get(xsrfCookieName) && $cookies.get(tokenCookieName)) {
return config;
} else {
// can I do something here to redirect cleanly?
}
},
responseError: function(rejection) {
if (rejection.status === 401) {
window.location.href = '/login';
}
return $q.reject(rejection);
}
};
});
来自 docs(强调我的):
requestError: interceptor gets called when a previous interceptor threw an error or resolved with a rejection.
因此您可以拒绝并从您的 request
创建状态为 401 的拒绝:
$httpProvider.interceptors.push(function($q, $cookies) {
return {
request: function(config) {
if ($cookies.get(xsrfCookieName) && $cookies.get(tokenCookieName)) {
return config;
} else {
return $q.reject({
status: 401
});
}
},
responseError: function(rejection) {
if (rejection.status === 401) {
window.location.href = '/login';
}
return $q.reject(rejection);
}
};
});