是否有跨浏览器方式忽略XHR触发的401错误?

时间:2011-08-18 08:10:28

标签: javascript http http-digest

尝试尽可能保持纯粹的REST方法,我认为应用程序成为API - 直到最后一点。

不幸的是,我遇到了一个绊脚石。在PHP中编写Digest身份验证处理程序之后,我发现自己无法使用Web浏览器中的用户体验友好,因为基于表单的身份验证方法就是这样。

这样做的原因是即使我可以通过Javascript模拟摘要式身份验证响应,使用HTML表单中的用户名和密码(我可以安全地将nonce值提供给脚本,因为它们的方式生成),如果失败,浏览器仍会显示标准的,丑陋的身份验证提示。

这有什么办法吗?之前的问题引用了mozBackgroundRequest,但这似乎很难跨浏览器。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以先使用AJAX发出请求,以确保提供的身份验证详细信息有效。

如果他们这样做,那就做你一直在做的事情。如果他们不这样做,请以您自己的,更好的方式告诉用户...

修改

如果您在PHP中控制auth例程(如果auth失败,可能正在执行header('HTTP/1.1 401 Unauthorized');等),您可以......不要这样做。相反,用正常的200 OK回复,但是在ajax.responseText中可以找到一个字符串(比如'authFailed'或其他东西)。

您只需向正常浏览器请求中不存在的AJAX请求添加标头(或cookie或其他内容),以便您区分AJAX身份验证检查和正常的经过身份验证的会话。

目前我脑子里的确切机制有点模糊(这是漫长的一天),但我确信可以用这种方法完成。