Angular在启动时解析用户

时间:2014-08-13 13:54:00

标签: angularjs angularjs-routing

希望这是一个简单的!

我希望在显示任何屏幕或调用任何后续服务之前确保访问应用程序的用户已解决。

我可以通过使用第一个请求中已经存在的令牌进行HTTP REST调用来解析用户。

然后将该用户传递给后续的休息呼叫,例如一个REST服务来#34;得到我的工作"。

我知道我可以在路由上使用解析功能,但为了实现这一点,我必须将其添加到每个路由中,因为我无法始终保证用户会通过前门进入。

我尝试将它放入一个跨越整个应用程序的主控制器,但问题是首先调用路由解析,这需要用户进行REST调用。

有什么想法吗?

此致 凯文。

1 个答案:

答案 0 :(得分:1)

我之前遇到过类似问题,我很幸运地遇到了this示例项目。

我们有2个项目

  1. One有一个自制的auth机制,包括一个外部应用程序,服务器端凭据检查,然后被重定向到内部应用程序。
  2. 和另一个(非常原型)使用示例项目的概念......到目前为止,我一直更喜欢这种方法。
  3. 在项目A中,我们基本上可以做到这一点。

      

    如果cookie在返回...工作完成时存在(&有效),则在cookie内写一个userToken。   如果没有,请登录以便我们创建cookie。

    但我的建议路线是遵循项目B:

      

    您基本上需要一个临时应用程序/状态,您可以在其中执行操作   初步检查,如果您的用户没有通过正常的登录路线进入。

    我从这个令人敬畏的mrgamer角度登录示例项目中耻辱地窃取了下图。 他的项目可以在here找到。

    Authflow

    angular.module('angular-login.pages', ['angular-login.grandfather'])
    .config(function ($stateProvider) {
      $stateProvider
        .state('app.admin', {
          url: '/admin',
          templateUrl: 'pages/admin.tpl.html',
          accessLevel: accessLevels.admin
        })
        .state('app.user', {
          url: '/user',
          templateUrl: 'pages/user.tpl.html',
          accessLevel: accessLevels.user
        });
    });
    

    文档非常冗长,应该解释整个方法的一些复杂性

    或者

    我并不熟悉这种方法(因为我还没有在完全成熟的应用程序中尝试过它)。您可以对$routeChangeStart

    进行检查
    angular.module('angular-client-side-auth', ['ngCookies'])  
    .run(['$rootScope', '$location', 'Auth', function ($rootScope, $location, Auth) {
    
        $rootScope.$on("$routeChangeStart", function (event, next, current) {
            if (!Auth.authorize(next.access)) {
                if(Auth.isLoggedIn()) $location.path('/');
                else                  $location.path('/login');
            }
        });
    
    }]);
    

    来自here

    的来源