Javascript 路由解析承诺,未完全解析-angularjs
所以,我想做的是一件简单的事: 检查每个路由上loggedUser的角色,并使用一个解析设置用户在后端的令牌或登录凭据是否有效 重定向到指定的路由 如果路由不允许,请重定向到其他路由 在我的路线提供商中,我有类似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: {
$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,在哪里设置。很抱歉,请你解释清楚好吗?