AngularJS ui路由器 - 身份验证解析导致停止请求

时间:2015-05-17 15:30:51

标签: angularjs authentication angular-ui-router angular-promise

出于某种原因,Angular的ui路由器和身份验证的组合对我来说并不起作用。 首先通过登录来解析应用程序状态,但是当解析时,模板视图的GET请求将被停止。

我提供的代码基于Angular.js Authentication with UI-Router

这个想法是,当用户未登录时,状态将更改为 login 。用户成功登录后,状态应更改为 app 。 在加载 InitiateAppController 之前,应该解析身份验证承诺。

-50.0,-50.0,30.00012772,-47.47203563,-50.0,29.99892056,-44.94407125,-50.0,30.00167397,-42.41610688,-50.0,29.99915497,-37.31940443,

SessionFactory 用于检查用户是否已登录。

app.config(function ($stateProvider, $urlRouterProvider) {

  $urlRouterProvider.otherwise('/');

  var authenticated = ['$q', 'SessionFactory', function ($q, SessionFactory) {
    var deferred = $q.defer();
    SessionFactory.isLoggedIn(false)
      .then(function (isLoggedIn) {
        if (isLoggedIn) {
          deferred.resolve("logged in");
        } else {
          deferred.reject("You need to log in.");
        }
      });
    return deferred.promise;
  }];

  $stateProvider
    .state('login', {
      templateUrl: '/partials/login-bar.html',
      controller: 'SessionController',
      url: '/login'
    })
    .state('app', {
      templateUrl: '/partials/menu-bar.html',
      controller: 'InitiateAppController',
      url: '/',
      resolve: {
        authenticated: authenticated
      }
    });
});

当用户点击 login_bar.html 视图中的登录按钮时,将执行以下代码(摘要):

app.factory('SessionFactory', function ($resource, $http, $state) {
  return {
    login: $resource('api/login/', {}, {
      save: {
        method: 'POST'
      }
    }),
    isLoggedIn: function(redirectToLogin) {
      return $http.get('api/loggedin')
        .then(function (res) {
          var user = res.data; //Either 0 or a user object
          if (user !== '0') {
            return user;
          }
          if (redirectToLogin) {
            return $state.go('login');
          }
          return false;
        });
    }
  }
});

现在发生的事情如下:

  1. 用户转到localhost:3000 /
  2. GET menu_bar.html 请求已停止
  3. 已加载状态更改为登录和_login_bar.html。
  4. 用户登录并启动 app 状态的** $ stateChangeStart *事件。
  5. 2分钟内没有任何事情发生,只有菜单 \ bar.html及其控制器已加载。
  6. Stalled request for 2 minutes.

    基本上我很好奇知道如何解决这个问题。我希望状态在用户未登录时更改为 login ,并在立即登录后将其更改为 app

    提前谢谢!

    (我很乐意提供更多信息)

0 个答案:

没有答案