【发布时间】:2017-04-07 21:55:24
【问题描述】:
TL;DR CanActivate 是如何工作的?
加长版 这是我第一次看到客户端访问控制的实现。
到目前为止,在我使用的所有身份验证系统中(例如 PHP 或其他服务器端编程语言),总是有一个函数可以检查用户是否已经登录,如果该函数返回 true,则服务器可以传递页面,否则用户将被重定向到登录页面。
在这种情况下客户端无法访问服务器代码,它只能发出请求并等待服务器组成页面,然后渲染它。
相反,Angular 的工作方式不同。它是一个使用 JavaScript 的客户端框架,每个人都可以看到它的代码。私人页面没有安全地放置在服务器内,唯一的服务器任务是交付 SPA,但它不能接受进一步的请求。
尽管如此,该框架实现了 CanActivate 的功能,并且运行良好。 所以我想知道是什么禁止我注入一些 JavaScript 代码并访问私有页面,即使我没有权限,或者更一般地说这个系统是如何工作的。在互联网上我没有找到足够的信息,我没有足够的技能来理解源代码。你能帮我澄清一下我的想法吗?
我可以问标题中的问题,但我更愿意将我知道的一切都告诉你,所以如果有什么不对的地方,你可以纠正我。谢谢你
【问题讨论】:
-
您仍然需要服务器端身份验证(因为恶意用户无论如何都可以访问任何内容)。路由器提供的保护方法对您来说有点方便。您应该交付没有硬编码秘密数据的空模板,并为授权用户填充它们。
CanActivate无需对每个组件/页面进行权限检查,而是允许您将其保存在一个地方并重用它。查看docs 了解更多信息和示例
标签: angular login angular2-router canactivate