延迟模板呈现以进行身份​​验证检查 Angular

Delaying template rendering for authentication check in Angular

Angular 如果您有静态 URL 导致内容与身份验证方案结合使用,则

Angular 可能会导致严重的安全问题。如果未注册用户访问该页面,内容将在屏幕上闪烁片刻,然后再重定向到安全位置。我发现了这个问题,进行了广泛的搜索,并在 $routeConfig 中解决了 属性 的问题。不幸的是,无论我做什么,它都不起作用。代码如下:

$routeProvider.when('/dashboard/:id', {
    templateUrl: 'js/partials/dashboard.html', 
    controller:'DashCtrl',
    access: access.user,
    resolve: {
      login: function(authService) {
        var promise = authService.isLoggedIn();
        promise.then(function(data){
        // We're in successfully 
        }).catch(function(err){
            // ew, go away, redirect to login page
            window.location = "login";
        });
      }
    }
});

AuthService.isLoggedIn() 看起来像:

isLoggedin : function() {
        return $http.get("users/session_check").then(function(result) {
            if (result.data) {
              if (user == undefined)
              {
                placeholderService.populatePlaceholders();
                user = result.data;
              }
              return result.data;
            } else {
              return $q.reject("Please log in.");
            }
          });
    }

无论如何,景色一闪而过。我在页面上有 ng-cloaks,什么都没有。我不知道还能做什么,但这已经变得非常令人气愤。

您传递给 $routeProvider 的函数应该 return 一个承诺。例如:

$routeProvider.when('/dashboard/:id', {
    templateUrl: 'js/partials/dashboard.html', 
    controller:'DashCtrl',
    access: access.user,
    resolve: {
      login: function(authService) {
        var promise = authService.isLoggedIn();
        return promise.then(function(data){
            // We're in successfully
            return data;  // This gets injected as "login"
        }).catch(function(err){
            // ew, go away, redirect to login page
            window.location = "login";
        });
      }
    }
});

而且,如果我没记错的话,履行承诺的价值最终可以作为服务注入到控制器中(在这种情况下,login 服务就是您履行承诺的任何内容与).