Knockout.js应用程序中的用户身份验证

Gru*_*uck 19 javascript knockout.js

(我在Twitter上被告知我在这里太模糊了所以我会尝试编辑)

我刚刚开始将Knockout.js用于带有PHP后端的应用程序(一个用于吐出JSON结果的API).部分应用程序将要求用户进行身份验证以使用它们(它是一个应用程序,用于投票"赢得"幻想棒球联盟中的特定交易)

我想知道人们如何处理使用服务器端API和Knockout等框架进行身份验证.我可以轻松编写接受凭据的PHP代码验证它们,并返回一个响应,我只是不知道如何维护用户使用Knockout进行"身份验证"的状态.

再加上在多个页面上维护"身份验证状态"的问题,我想知道它是如何实现的.在PHP中,您可以将这些内容存储在会话中,甚至可以使用cookie.

我有很多PHP经验,所以我不担心这个小方项目的API部分.我是Knockout.js的初学者(在Javascript的初学者和中级人员之间),所以任何有关如何实现这一目标的提示都将非常感激.

nik*_*org 19

不要存储经过身份验证的状态.使用响应代码,就像使用任何其他API一样.

最终后端进程(简化到极端)将是这样的:

  1. 从前端/客户端收到请求
  2. 此请求是否需要特权
    1. 不,转到4
    2. 是的,转到3
  3. 是否已识别用户
    1. 不,回复401
    2. 是的,但没有足够的权限,请回复403
    3. 是的,转到4
  4. 发送回复

在前端/客户端:

  1. 向API发送请求
  2. 是响应HTTP 200
    1. 是的,转到4
    2. 不,转到3
  3. 是401吗?
    1. 是的,显示登录屏幕
    2. 不,触发错误
  4. 显示结果

如果您突然遇到登录屏幕,这可能不是那里最好的用户体验设计.但是,这可以通过允许用户在任何时间点进行身份验证来规避,但在绝对必要之前不需要它.(为了获得最终的平滑性,您需要能够重播认证成功后失败的请求.)

当然,对于后续请求,这要求您在服务器上运行会话,或者您的传输层可以在身份验证后透明地附加OAuth令牌或类似于请求.

本质上,这与存储经过身份验证的状态相同,但更透明,并且不会假设状态是标志所说的状态.例如,假设您使用存储在memcached中的会话,即segfaults并重新启动.这意味着您的会话已经消失,任何经过身份验证的人都不再存在.如果你的前端仍然拥有authenticated = true并且依赖它,那么东西就会破裂.

更新:

睡了一夜之后,我意识到你必须区分401和403.由于可能有不同级别的用户,你需要403告诉前端/客户端,即使这个用户可能被认证,他仍然不被允许访问.