处理4xx错误,以及使用uiRouter时的登录

时间:2015-07-19 18:51:09

标签: angularjs angular-ui-router

好吧,我来自ngRoute背景,我刚开始学习uiRouter

我曾经为登录(login.html)写了两个不同的角度应用程序,一个用于主应用程序(index.html)。在后端,我只是检查用户是否经过身份验证,然后将其重定向到index.html,否则重定向到login.html。

现在我想将登录封装到主应用程序中。我有很多州要求用户登录。在很多州,一些部分,如页眉和页脚是固定的。我正在寻找一个具体的解决方案,以解决这些问题:

  • 我不想对所有需要身份验证的州使用resolve属性。
  • 对于需要身份验证的州,我不希望我的路由与/some-prefix-for-authed-paths/...类似。
  • 如果有人导航到需要身份验证的路由,我想将它们重定向到登录页面,登录后我想将它们重定向回原来的位置。
  • 对于4xx错误,我想显示自定义错误页面(可能与路径有关)。例如,如果有人导航到/ users / 3,并且没有用户3(将由状态的resolve属性确定,如果不存在用户将被拒绝),我想向他们显示错误页面,但我 DON' 想要将路线改为/error之类的东西,因为它实际上根本没有意义!另外,我不希望在浏览器历史记录中进行状态推送。

1 个答案:

答案 0 :(得分:0)

您可以尝试实现捕获所有非2xx请求的httpInterceptor并重定向到某种错误/登录页面。

另外,要检查身份验证,可以通过向状态添加访问级别来使用uiRouter onStateChange事件

.state('someState', {
    url: '/someUrl',
    isPrivate: true
})

$rootScope.$on('$stateChangeStart', 
    function(event, toState, toParams, fromState, fromParams){ 
        event.preventDefault(); 

        // Check if state is private
        if(toState.isPrivate) {
              // Do something
        }
});

请注意!这只是一些伪代码