gpt4 book ai didi

authentication - 如何使用 AngularJS ngView 为未经授权的用户隐藏模板?

转载 作者:行者123 更新时间:2023-12-04 00:56:42 25 4
gpt4 key购买 nike

我有一个基本的 PHP 应用程序,其中用户登录信息存储在 HTTP session 中。该应用程序有一个主模板,比如 index.html,它使用 ngView 切换 subview ,如下所示

<body ng-controller='MainCtrl'>
<div ng-view></div>
</body>

现在,这个主模板可以通过基本的 PHP 控件来保护,但我有子模板(即用户列表、添加用户、编辑用户等),它们是纯 html 文件,根据我的路由设置从 angular 中包含。

虽然我能够检查与 http 服务请求有关的身份验证,但一位用户能够导航到子模板 url 并访问它。我怎样才能防止这种情况发生?

最佳答案

我会创建这样的服务:

app.factory('routeAuths', [ function() {
// any path that starts with /template1 will be restricted
var routeAuths = [{
path : '/template1.*',
access : 'restricted'
}];
return {
get : function(path) {
//you can expand the matching algorithm for wildcards etc.
var routeAuth;
for ( var i = 0; i < routeAuths.length; i += 1) {
routeAuth = routeAuths[i];
var routeAuthRegex = new RegExp(routeAuth.path);
if (routeAuthRegex.test(path)) {
if (routeAuth.access === 'restricted') {
return {
access : 'restricted',
path : path
};
}
}
}
// you can also make the default 'restricted' and check only for 'allowed'
return {
access : 'allowed',
path : path
};
}
};
} ]);

并在主/根 Controller 中监听 $locationChangeStart事件:
app.controller('AppController', ['$scope', '$route', '$routeParams', '$location', 'routeAuths',
function(scope, route, routeParams, location, routeAuths) {
scope.route = route;
scope.routeParams = routeParams;
scope.location = location;

scope.routeAuth = {
};

scope.$on('$locationChangeStart', function(event, newVal, oldVal) {
var routeAuth = routeAuths.get(location.path());
if (routeAuth.access === 'restricted') {
if (scope.routeAuth.allowed) {
event.preventDefault();
}
else {
//if the browser navigates with a direct url that is restricted
//redirect to a default
location.url('/main');
}
scope.routeAuth.restricted = routeAuth;
}
else {
scope.routeAuth.allowed = routeAuth;
scope.routeAuth.restricted = undefined;
}
});

}]);

演示 :
  • plunker

  • 引用文献 :
  • angularjs services
  • location

  • 更新 :

    为了完全防止 html 模板访问,最好在服务器上完成。因为如果您从服务器上的静态文件夹提供 html,用户可以直接访问该文件,例如:root_url/templates/template1.html,从而绕过 Angular 检查器。

    关于authentication - 如何使用 AngularJS ngView 为未经授权的用户隐藏模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13885805/

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