gpt4 book ai didi

javascript - 检查经过身份验证的用户是否具有 role=admin 并阻止访问状态 ui-router

转载 作者:行者123 更新时间:2023-12-03 06:57:18 26 4
gpt4 key购买 nike

如果经过身份验证的用户具有管理员 Angular 色,我将如何获取并使用该 Angular 色来阻止访问状态提供程序中的状态?

node/server.js 函数从经过身份验证的用户获取 Angular 色:

app.get('/api/isadmin', ensureAuthenticated, function (req, res) {
User.findById(req.user, function (err, user) {
if (req.role !== 'admin') {
return res.status(403).send('Unauthorized');
}
res.send(user);
});
});

这就是我正在努力弄清楚如何让它发挥作用的地方。我可以得到回应。我设法使用工厂和 Controller 从当前用户获取 Angular 色。

angular.module('App')
.factory('Admin', function ($http) {
$scope.isAdmin = function () {
$http.get('http://localhost:3000/api/isadmin')
.success(function (response) {
return response.data.role;
});
}
});

angular.module('App')
.controller('AdminCtrl', function ($scope, toastr, Admin) {
$scope.getAdmin = function () {
Admin.getAdmin()
.then(function (response) {
$scope.role = response.data.role;
console.log($scope.role);
})
.catch(function (response) {
toastr.error(response.data.message, response.status);
});
};
$scope.getAdmin();
});

我的问题是如何在 app.js 中发生这种情况,以便我可以将其附加到状态?我已经看过这个堆栈问题( Angular ui-router: how to prevent access to a state ),但我没有让它工作。我使用 satellizer 进行身份验证,它有一个 $auth.isAuthenticated() 函数,我用它来尝试阻止未经身份验证的用户访问状态。这不起作用:

.state('profile', {
url: '/profile',
templateUrl: 'Scripts/App/partials/profile.html',
controller: 'ProfileCtrl',
resolve: {
security: ['$q', function ($q, $auth) {
if (!$auth.isAuthenticated()) {
return $q.reject('Not Authorized');
}
}]
}
});

非常感谢任何帮助。

最佳答案

您可以添加 global event listener$stateChangeStart 上,并在其处理程序中检查用户授权,如果用户未经授权,只需调用 event.preventDefault() 来阻止转换发生:

angular.module('App').run([
'$rootScope', '$auth', '$state',

function($rootScope, $auth, $state){

$rootScope.$on('$stateChangeStart', function(event, toState){
if(toState.name == 'some states you want to protect'){
if(!$auth.isAuthenticated()){
event.preventDefault();
$state.go('home')
}
}
})

}
])

关于javascript - 检查经过身份验证的用户是否具有 role=admin 并阻止访问状态 ui-router,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37220112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com