2011-08-18 21 views
0

爲了保持儘可能純粹的REST方法,我決定應用程序作爲API - 直到最後一位。是否有跨瀏覽器的方式來忽略XHR引發的401錯誤?

不幸的是,我已經到了一個絆腳石。在PHP中編寫Digest認證處理程序後,我發現自己無法像Web認證方法那樣使用戶在Web瀏覽器中友好。

原因是,儘管我可以通過Javascript模擬一個Digest認證響應,使用HTML表單中的用戶名和密碼(由於它們生成的方式,我可以安全地將nonce的值賦予腳本) ,如果失敗,瀏覽器仍然會顯示標準,醜陋的身份驗證提示。

有沒有辦法解決這個問題?前面的問題引用mozBackgroundRequest,但這似乎很難跨瀏覽器。

謝謝!

回答

0

您可以先使用AJAX發出請求,以確保提供的驗證詳細信息正常。

如果他們這樣做,做你一直在做的事情。如果他們不這樣做,告訴它自己的用戶,更好的方式...

編輯

如果你控制在PHP中的身份驗證程序(如果AUTH失敗,想必做header('HTTP/1.1 401 Unauthorized');等)你可以......不這樣做。相反,使用正常的200 OK進行響應,但在正文中放入一個字符串,您可以在ajax.responseText(如'authFailed'或其他)中查找該字符串。

您可以在AJAX請求中添加一個標頭(或一個cookie,或其他東西),這些標記在正常的瀏覽器請求中不存在,以便區分AJAX身份驗證檢查和正常的已驗證會話。

在我頭腦中的確切力學現在有點模糊(這是一個漫長的一天),但我相信它可以使用該方法完成。

+0

那麼,這是我目前正在做的。問題在於,無論如何顯示提示對話框 - 除非你的意思是我編寫了其他一些驗證數據的方法?這可能是一個選擇,雖然是一個混亂的。 –

+0

不,我的意思只是檢查'responseCode'中的401 - 我以爲這會在沒有顯示提示的情況下默默地失敗,但我只是嘗試了它,而不是。其實,我剛剛從閱讀另一篇文章中看到一個想法,在一兩分鐘內看到我的編輯... – DaveRandom

+0

剛剛測試 - 我認爲這似乎是最好的解決方案,直到有希望的瀏覽器供應商提供更好的方式。我遇到了一個不同的問題 - 我提出的身份驗證請求不會被「記住」 - 但這是另一個問題,並且可能仍然是未解決的問題... –

相關問題