尝试尽可能保持纯粹的REST方法,我认为应用程序将成为API - 直到最后一点。
不幸的是,我遇到了一个绊脚石。在PHP中编写Digest身份验证处理程序之后,我发现自己无法使用Web浏览器中的用户体验友好,因为基于表单的身份验证方法就是这样。
这样做的原因是即使我可以通过Javascript模拟摘要式身份验证响应,使用HTML表单中的用户名和密码(我可以安全地将nonce
值提供给脚本,因为它们的方式生成),如果失败,浏览器仍会显示标准的,丑陋的身份验证提示。
这有什么办法吗?之前的问题引用了mozBackgroundRequest
,但这似乎很难跨浏览器。
谢谢!
答案 0 :(得分:0)
您可以先使用AJAX发出请求,以确保提供的身份验证详细信息有效。
如果他们这样做,那就做你一直在做的事情。如果他们不这样做,请以您自己的,更好的方式告诉用户...
修改强>
如果您在PHP中控制auth例程(如果auth失败,可能正在执行header('HTTP/1.1 401 Unauthorized');
等),您可以......不要这样做。相反,用正常的200 OK回复,但是在ajax.responseText
中可以找到一个字符串(比如'authFailed'或其他东西)。
您只需向正常浏览器请求中不存在的AJAX请求添加标头(或cookie或其他内容),以便您区分AJAX身份验证检查和正常的经过身份验证的会话。
目前我脑子里的确切机制有点模糊(这是漫长的一天),但我确信可以用这种方法完成。