设置BoilerplateJS后,处理授权和身份验证的推荐方法是什么?
显然,在服务器端,您需要检查cookie等以了解谁已登录。但是,在客户端,您如何知道用户是否已登录以及他们的用户名等是什么?
答案 0 :(得分:6)
我将在其中一个使用BoilerplateJS的项目中分享如何做到这一点。在这个项目中,我们使用OAuth 2.0进行身份验证。
我们有一个单独的登录页面,它不使用BoilerplateJS或复杂的JS。保持分离的原因是身份验证可能依赖于URL重定向,而JS不能很好地处理。
一旦用户被正确认证,我们就会收到服务器会话的auth_token并将其存储为JS变量。我们使用全局Boiler.Context的“设置”来存储此令牌。由于设置被继承到子上下文,我们可以从任何地方访问它。
出于授权目的,我们随后为包含授权访问密钥的已登录用户下载了一个简单ACL。这些键仅用于显示/隐藏控件的客户端验证。对后端服务进行了实际授权。
我们希望BoilerplateJS组件完全自包含,包括对其进行身份验证。因此,如果特定组件的viewmodel从服务器接收到未经授权的401 HTTP响应(未登录OR或会话到期),我们会以不同方式呈现组件,而不会将用户重定向到登录页面。
由于我们没有重定向,因此即使BoilerplateJS组件没有主动显示其内容,用户也可以在页面上使用其他信息。我们在组件上提供了一些错误信息,并提供了重新登录的链接。
通过我们创建的通用错误处理程序完成此操作。从component.js,我们将错误回调函数传递给我们的viewmodel(你也可以在上下文中使用它)。 viewmodel使用此回调函数来通知其中发生的任何错误。在401 HTTP代码的情况下,调用此处理程序,要求component.js呈现具有错误信息的UI和重新登录的链接。
用户点击重新登录网址即可返回登录页面。此URL包含对原始URL的反向引用,以便用户能够访问身份验证后的页面。