阻止访问AngularJS中的pipe理页面

我想知道AngularJS中最好的方法是保护pipe理页面,即普通用户不应该看到的页面。 显然,会有后端authentication,但由于AngularJS应用程序是客户端,人们仍然可以从理论上看路由,直接转到这些URL并查看pipe理页面。

我使用Express,PassportJS和MongoDB(Mongoose)作为我的后端。 自然,他们将无法与pipe理页面进行交互,因为在创build,删除服务器端身份validation,但我宁愿甚至不提供页面给用户,如果他们没有适当的访问。 由于该应用程序是完全客户端JS,但我认为这是不可能的,因为人们可以修改路由和其他东西。 最好的办法是什么呢? 感谢您的任何意见!

我会把一个检查里面的routeProvider。 对于需要authentication的每一条路由都必须完成。 您甚至可以编写一个单独的方法并将其粘贴到每个path以避免重复。

$routeProvider .when('/profile', { templateUrl: 'views/profile.html', controller: 'ProfileCtrl', resolve: { validate: function($q, $location) { // Either you could maintain an array of hashes on client side // a user do not have access to without login // Or hit the backend url to check it more securely var validateAccess = $q.defer(); var isAllowed = ['profile', 'index', 'dashboard'].indexOf($location.hash()) !== -1; if (!isAllowed) { $location.path('/login'); } validateAccess.resolve(); return validateAccess.promise; } } }) .otherwise({ redirectTo: '/' }); 

这个问题有点老,但如果有人正在寻找解决scheme,那么我正在使用一个资源文件来存储我的html模板,然后用webapi检索它,同时validation权限,只有当用户authentication时才返回html。

为什么你会“更喜欢”不把这些页面提供给非pipe理员用户? 你有一个真正的理由去关心这个,除了一些本能,你应该阻止人们看到他们不应该“看到”的东西吗?

如果您的安全configuration正确,则非pipe理员用户将无法访问pipe理员数据或执行pipe理操作。 这就是你应该关注的东西,而不是发明精心devise的方法来阻止他们看到他们无法使用的pipe理员屏幕。 任何时候你花这个时间基本上是浪费时间,你应该花在更重要的事情上。

我做的方式是,把JSP页面中的angularJS html和检查会话。 如果会话validation提供访问。 我不确定这是否正确。 另一种方法是,不要使用JSP,但每个API命中,在服务器检查会话,否则返回false。 还有一种方法是首先login,获取自动生成的密钥,在服务器和客户端都存储,检查每个API命中。

你可以在ui-router使用params https://github.com/angular-ui/ui-router/tree/master

我同意Chris Russo的担忧。 这是关于安全问题的。 如果您正在为前端使用angular度,那么您需要一个框架,如果有人试图攻击您的网站/应用程序,那么该框架在保护您的应用程序方面具有很强的能力。 我会推荐spring框架(spring_security),它已经certificate了保护你的web应用程序的function。 您需要为每个用户分配angular色,例如ROLE_USER或ROLE_ADMIN。 我不会深入细节如何去做,但这将有助于解决您的疑虑。 🙂