我在名为Auth.js
的文件中包含此代码。
hasRole:function(){
的console.log(currentUser);
return currentUser.role; // role是一个对象数组,但是给出了undefined
}
我需要在登录后的任何地方重定向之前解析hasRole的值。
登录看起来像这样:
var role=[];
login: function(user, callback) {
var cb = callback || angular.noop;
var deferred = $q.defer();
$http.post('/auth/local', {
email: user.email,
password: user.password
}).
success(function(data) {
$cookieStore.put('token', data.token);
currentUser = User.get();
console.log(currentUser);//gives an unresolved promise (output is given after this piece of code.
role = currentUser.role; //gives undefined
deferred.resolve(data);
return cb();
}).
error(function(err) {
this.logout();
deferred.reject(err);
return cb(err);
}.bind(this));
return deferred.promise;
}}
并且调用如下:
$scope.login = function(form) {
$scope.submitted = true;
if(form.$valid) {
Auth.login({
email: $scope.user.email,
password: $scope.user.password
})
.then( function() {
// Logged in, redirect to home
var role = Auth.hasRole();
console.log(role) //gives undefined.
//Need to redirect on basis of value of role
/*if(role.priority >= 1){
$location.path('/admincontrol');
}else{
$location.path('/');
}*/
})
.catch( function(err) {
$scope.errors.other = err.message;
});
}
};
如何在此处访问currentUser.role?我需要在登录之后和在重定向之前在$ scope.login中获取它的值,以便我可以根据其值重定向。
编辑:用户服务如下所示:
'use strict';
angular.module('createProjectApp')
.factory('User', function ($resource) {
// return $resource('/api/users/:id/:controller', {
return $resource('/api/customUsers/:id/:controller', {
id: '@_id'
},
{
changePassword: {
method: 'PUT',
params: {
controller:'password'
}
},
get: {
method: 'GET',
params: {
id:'me'
}
}
});
});
登录时安慰的
答案 0 :(得分:1)
User.get()本身就是一个返回promise的函数。在继续之前,您将不得不等待承诺满额,如
currentUser.then(function() {
console.log(currentUser);
role = currentUser.role; //gives undefined
deferred.resolve(data);
return cb();
}
由于您使用的是承诺,因此不需要cb()本身 - 但您可能会有一些特别的想法。