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

标签 javascript knockout.js

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

我刚刚开始将 Knockout.js 用于具有 PHP 后端(输出 JSON 结果的 API)的应用程序。该应用程序的某些部分将要求用户经过身份验证才能使用它们(这是一个用于投票决定谁“赢得”梦幻棒球联盟中特定交易的应用程序)

我想知道人们如何使用服务器端 API 和 Knockout 等框架进行身份验证。我可以轻松编写 PHP 代码,该代码接受凭据、验证它们,并返回响应,我只是不知道如何使用 Knockout 维护用户已“经过身份验证”的状态。

此外,在多个页面上维护“经过身份验证的状态”也存在问题,我想知道这如何可能。在 PHP 中,您可以将这些内容存储在 session 中,甚至可以使用 cookie。

我有丰富的 PHP 经验,所以我不担心这个小项目的 API 部分。我是 Knockout.js 的初学者(介于 Javascript 的初学者和中级之间),所以任何有关我如何实现这一目标的提示将不胜感激。

最佳答案

不存储经过身份验证的状态。使用响应代码,就像使用任何其他 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. 显示结果

如果您突然面临登录屏幕,这可能不是最好的用户体验设计。不过,这可以通过允许用户在任何时间点进行身份验证来规避,但要求除非绝对必要。 (为了获得最终的流畅性,您需要能够在身份验证成功后重放失败的请求。)

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

本质上,这与存储经过身份验证的状态相同,但更加透明,并且在任何时候都不会假设状态就是标志所说的那样。例如,假设您使用存储在 memcached 中的 session ,该 session 会出现段错误并重新启动。这意味着您的 session 已经消失,任何经过身份验证的人都不再存在。如果您的前端仍然具有 authenticated = true 并依赖它,那么事情就会崩溃。

更新:

睡了一夜之后,我发现你必须区分401和403。因为可能存在不同级别的用户,所以你需要403来告诉前端/客户端,即使这个用户可能已通过身份验证,但他仍然不被允许访问。

关于javascript - Knockout.js 应用程序中的用户身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9322377/

相关文章:

javascript - 浏览器扩展可以覆盖 CSS 媒体功能/查询吗?

javascript - JavaScript 中的 Beget 函数 : The Good Parts

javascript - 如何从外部reactjs获取变量

php - 使用 php、mysql 和 javascript 进行考勤

javascript - playPause 按钮​​不会在轨道跳过时重置

javascript - 来自 JSON 的 Knockout JS 映射不起作用

asp.net-mvc - 防止 knockout 可观察数组上的重复

javascript - 应用标准业务代码

javascript 数组序列化

javascript - 如何将 knockout.js 与 CMS 结合使用?