เว็บแอปพลิเคชันของฉันมีหน้าเข้าสู่ระบบที่ส่งข้อมูลรับรองการรับรองความถูกต้องผ่านการโทร AJAX หากผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่านที่ถูกต้องทุกอย่างก็เรียบร้อย แต่หากไม่เป็นเช่นนั้นสิ่งต่อไปนี้จะเกิดขึ้น:
- เว็บเซิร์ฟเวอร์พิจารณาว่าแม้ว่าคำขอจะมีส่วนหัวการอนุญาตที่มีรูปแบบที่ดี แต่ข้อมูลประจำตัวในส่วนหัวจะไม่สามารถพิสูจน์ตัวตนได้สำเร็จ
- เว็บเซิร์ฟเวอร์ส่งคืนรหัสสถานะ 401 และมีส่วนหัว WWW-Authenticate อย่างน้อยหนึ่งรายการแสดงประเภทการรับรองความถูกต้องที่สนับสนุน
- เบราว์เซอร์ตรวจพบว่าการตอบสนองต่อการเรียกของฉันบนอ็อบเจ็กต์ XMLHttpRequest คือ 401 และการตอบสนองรวมถึงส่วนหัว WWW-Authenticate จากนั้นจะปรากฏกล่องโต้ตอบการตรวจสอบความถูกต้องเพื่อถามชื่อผู้ใช้และรหัสผ่านอีกครั้ง
ทั้งหมดนี้ใช้ได้ดีจนถึงขั้นตอนที่ 3 ฉันไม่ต้องการให้กล่องโต้ตอบปรากฏขึ้นฉันต้องการจัดการการตอบสนอง 401 ในฟังก์ชันการโทรกลับ AJAX ของฉัน (ตัวอย่างเช่นการแสดงข้อความแสดงข้อผิดพลาดในหน้าล็อกอิน) แน่นอนว่าฉันต้องการให้ผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่านอีกครั้ง แต่ฉันต้องการให้พวกเขาเห็นแบบฟอร์มการเข้าสู่ระบบที่เป็นมิตรและมั่นใจของฉันไม่ใช่ค่าเริ่มต้นของเบราว์เซอร์ที่น่าเกลียด กล่องโต้ตอบการตรวจสอบสิทธิ์
บังเอิญฉันไม่สามารถควบคุมเซิร์ฟเวอร์ได้ดังนั้นการส่งคืนรหัสสถานะที่กำหนดเอง (เช่นอย่างอื่นที่ไม่ใช่ 401) จึงไม่ใช่ตัวเลือก
มีวิธีใดบ้างที่ฉันสามารถระงับกล่องโต้ตอบการตรวจสอบสิทธิ์ได้ โดยเฉพาะอย่างยิ่งฉันสามารถระงับกล่องโต้ตอบที่จำเป็นในการตรวจสอบสิทธิ์ใน Firefox 2 หรือใหม่กว่าได้หรือไม่ มีวิธีใดในการระงับกล่องโต้ตอบConnect to [host]ใน IE 6 และใหม่กว่า
แก้ไข
ข้อมูลเพิ่มเติมจากผู้เขียน (18 ก.ย. ):
ฉันควรเพิ่มว่าปัญหาที่แท้จริงของกล่องโต้ตอบการตรวจสอบสิทธิ์ของเบราว์เซอร์ที่ปรากฏขึ้นคือการให้ข้อมูลที่ไม่เพียงพอแก่ผู้ใช้
ผู้ใช้เพิ่งป้อนชื่อผู้ใช้และรหัสผ่านผ่านแบบฟอร์มในหน้าเข้าสู่ระบบเขาเชื่อว่าเขาพิมพ์ทั้งสองอย่างถูกต้องและเขาได้คลิกปุ่มส่งหรือกด Enter ความคาดหวังของเขาคือเขาจะถูกนำไปที่หน้าถัดไปหรืออาจจะบอกว่าเขาป้อนข้อมูลไม่ถูกต้องและควรลองอีกครั้ง อย่างไรก็ตามเขาได้รับกล่องโต้ตอบที่ไม่คาดคิดแทน
โต้ตอบทำให้การรับรู้ของความจริงที่ไม่มีเขาก็ไม่ใส่ชื่อผู้ใช้และรหัสผ่าน ไม่ได้ระบุอย่างชัดเจนว่ามีปัญหาและเขาควรลองอีกครั้ง แต่กล่องโต้ตอบจะแสดงข้อมูลที่เป็นความลับแก่ผู้ใช้เช่น "ไซต์ระบุว่า:" [realm] "" โดยที่[realm]เป็นชื่ออาณาจักรสั้น ๆ ที่มีเพียงโปรแกรมเมอร์เท่านั้นที่ชื่นชอบ
นักออกแบบเว็บโบรกเกอร์รับทราบ: ไม่มีใครถามว่าจะระงับกล่องโต้ตอบการตรวจสอบสิทธิ์ได้อย่างไรหากกล่องโต้ตอบนั้นใช้งานง่ายกว่า ทั้งเหตุผลที่ฉันทำแบบฟอร์มการเข้าสู่ระบบคือการที่ทีมผู้บริหารผลิตภัณฑ์ของเราถูกต้องพิจารณาเบราว์เซอร์กล่องโต้ตอบการตรวจสอบจะเป็นที่น่ากลัว