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