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