我使用Angular1.3.14开发了一个AngularJS应用程序(SPA)。
SPA基本上分为两个部分:(1)“站点”是所有公共的东西;(2)“应用程序”需要一个有效的
SessionID
在标题中。否则,它抛出一个http401。
一切工作都相对良好,如预期的那样。只要我有一个有效的SessionID。如果我的SessionID已经过期(或者没有提供),则返回http401(根据需要)。
templateUrl
和
controller
选项,所有页面(视图)都会自动加载。
因此,我不太确定在何处/如何拦截http401,以便正确地重定向到
登录
我想捕获HTTP401错误(或至少其中一个),并向用户提供一个有效的消息(即:“会话已过期”或“需要登录”或重定向到登录页后的内容)。
提前谢谢。
我发现如下:
$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
console.log("State change error:");
console.log(" > Event : ", event);
console.log(" > toState : ", toState);
console.log(" > toParams : ", toParams);
console.log(" > fromState : ", fromState);
console.log(" > fromParams : ", fromParams);
console.log(" > error : ", error);
//event.preventDefault();
});
有趣的是
error
参数包含以下内容:
> error : {data: {â¦}, status: 401, headers: Æ, config: {â¦}, statusText: ""}
if (error.data.success === false) {
console.log("Redirecting to 'Sign-in' page...");
$state.go('sign-in');
}
剩下的唯一问题是,我有许多状态视图,虽然我可以捕获错误并重定向,但所有其他视图仍然发送到服务器并失败。这是因为它们都是并行发送的吗?我会继续挖的!