Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 路由解析承诺,未完全解析-angularjs_Javascript_Angularjs_Angular Routing_Angular Promise - Fatal编程技术网

Javascript 路由解析承诺,未完全解析-angularjs

Javascript 路由解析承诺,未完全解析-angularjs,javascript,angularjs,angular-routing,angular-promise,Javascript,Angularjs,Angular Routing,Angular Promise,所以,我想做的是一件简单的事: 检查每个路由上loggedUser的角色,并使用一个解析设置用户在后端的令牌或登录凭据是否有效 重定向到指定的路由 如果路由不允许,请重定向到其他路由 在我的路线提供商中,我有类似 $routeProvider ... .when('/admin', { templateUrl: 'views/admin/dashboard.html', controller: 'AdminDashboardCtrl', resolve: {

所以,我想做的是一件简单的事:

检查每个路由上loggedUser的角色,并使用一个解析设置用户在后端的令牌或登录凭据是否有效 重定向到指定的路由 如果路由不允许,请重定向到其他路由 在我的路线提供商中,我有类似

$routeProvider
  ...
  .when('/admin', {
    templateUrl: 'views/admin/dashboard.html',
    controller: 'AdminDashboardCtrl',
    resolve: {
      checkLoggedUser: check
    }
  })
  ...
这个函数在哪里

var check = function($rootScope, $q, AuthService) {
  var deferred = $q.defer();

  if($rootScope.loggedUser) {
    return;
  }

  console.log('inside resolve check')

  AuthService.check().success(function(data) {
    $rootScope.loggedUser = data.user;
    deferred.resolve(data.user);
  });

  console.log('finished check')

  return deferred.promise;
};
check: function()
  {
    var authtoken = StorageService.get('authtoken');
    if(!authtoken) {
      $location.path('login');
    }

    console.log('before returning');

    return $http.post($rootScope.base + 'auth/authenticate', { 'authtoken': authtoken });
  },
我的AuthService.check就是这个函数

var check = function($rootScope, $q, AuthService) {
  var deferred = $q.defer();

  if($rootScope.loggedUser) {
    return;
  }

  console.log('inside resolve check')

  AuthService.check().success(function(data) {
    $rootScope.loggedUser = data.user;
    deferred.resolve(data.user);
  });

  console.log('finished check')

  return deferred.promise;
};
check: function()
  {
    var authtoken = StorageService.get('authtoken');
    if(!authtoken) {
      $location.path('login');
    }

    console.log('before returning');

    return $http.post($rootScope.base + 'auth/authenticate', { 'authtoken': authtoken });
  },
在我的.run函数中

$rootScope.$on('$routeChangeSuccess', function() {
  setIntendedUrl();
  console.log($rootScope.loggedUser);
  console.log($location.path());
});
和SetIntendeDuser检查loggedUser并重定向到正确的页面,或者,在我尝试完成的过程中,如果不允许重定向到其他页面,例如loggedUser的角色为1,只能访问路由/admin,如果用户的角色为2,请求的路径为/admin,则必须将其重定向到/user

因此,在所有这些代码之后,当应用程序运行时,这是我在控制台中的日志,请参见代码中的调用位置

inside resolve check app.js:29
before returning authservice.js:24
finished check app.js:36
intended: /admin/agents/create app.js:149 <--- here is where I redirect the user
Object {id: "21", name: "Kyle", surname: "Butler", roleId: "2"...} app.js:167
/admin/agents/create <--- requested path

我做错了什么?为什么在执行其他代码之前无法解析check函数中的用户?

用户登录后,可以使用session/locals存储或$rootScope存储具有给定路由、权限信息的用户授权对象

现在是路由解析或运行块,您可以检索用户身份验证对象并执行授权操作

e、 g


}])

很抱歉,我不理解您的代码,如果我在之前要求服务器验证用户身份并向我发送详细信息,为什么我必须从本地数据获取记录的用户详细信息?这也很容易中断并访问不允许的路由,只需打开控制台并设置/更改本地数据中的值。我也不明白什么是taskAccess,在哪里设置。很抱歉,请你解释清楚好吗?