首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angularjs身份验证重定向问题

Angularjs身份验证重定向问题
EN

Stack Overflow用户
提问于 2015-04-28 15:46:19
回答 2查看 170关注 0票数 0

我有一个应用程序,每个页面,除了登录需要认证。为此,我检查$stateChangeStart,然后在没有设置令牌时重定向到/login。在最初的应用程序加载中,这很好,但是在登录屏幕上,如果我键入另一个“受限制的”url的话。它执行检查,更改url,但仍然加载受限页。我在这里错过了什么?

//app.run:

代码语言:javascript
复制
 app.lazy = $couchPotato;
    $rootScope.$state = $state;
    $rootScope.$stateParams = $stateParams;
    $rootScope.$on('$stateChangeStart', function(event, toState, toStateParams) {
        console.log("state changed to "+toState.name);
        console.log(toState);
        Authentication.validateLogin(toState, toStateParams);
    });

Authentication.validateLogin:

代码语言:javascript
复制
validateLogin:function(toState, toStateParams){
        $rootScope.toState = toState;
        $rootScope.toStateParams = toStateParams;
        if ($localStorage.token == null) {
             console.error("Not Authenticated!");
             $location.url('/login');
        }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-28 16:08:08

我看到你使用的是角ui,所以我不太清楚它比使用“基本”角度有什么好处,但是我写这个是为了处理路由改变时验证令牌的问题。

代码语言:javascript
复制
app.run(['$rootScope', 'authService',
    function ($rootScope, authService) {
        $rootScope.$on("$routeChangeSuccess", function (event, next, current) {
            if (next && next.$$route && authService.isAuthenticated()) {
                authService.validate();
                $rootScope.appTitle = next.$$route.title;
            }
        });
    }]);

$routeChangeSuccess在控制器加载后处理导航到路由(对于在确认验证时加载页面时加载的对象非常重要),然后对它们进行验证。

这还会执行2次检查,因为它检查本地存储中的令牌是否存在并正确形成,如果存在,则将其发送回服务器以确认这一点。

我还发现,当有人试图刷新页面时,我必须使用$locationChangeStart来处理页面刷新,以重新验证页面。

validateLogin解决方案:

代码语言:javascript
复制
validateLogin:function(toState, toStateParams){
  if(toState.access){
        if(toState.access.loginRequired){
               if ($localStorage.token == null) {
                   $state.go('login');
               }
         }
  }
票数 1
EN

Stack Overflow用户

发布于 2015-04-28 19:14:44

用validateLogin试试这个:

代码语言:javascript
复制
validateLogin:function(toState, toStateParams){
      if(toState.access){
            if(toState.access.loginRequired){
                   if ($localStorage.token == null) {
                       $state.go('login');
                   }
             }
      }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29923962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档