Ứng dụng web của tôi có một trang đăng nhập gửi thông tin xác thực thông qua cuộc gọi AJAX. Nếu người dùng nhập đúng tên người dùng và mật khẩu, mọi thứ đều ổn, nhưng nếu không, điều sau sẽ xảy ra:
- Máy chủ web xác định rằng mặc dù yêu cầu bao gồm tiêu đề Ủy quyền được định dạng tốt, nhưng thông tin đăng nhập trong tiêu đề không xác thực thành công.
- Máy chủ web trả về mã trạng thái 401 và bao gồm một hoặc nhiều tiêu đề WWW-Authenticate liệt kê các loại xác thực được hỗ trợ.
- Trình duyệt phát hiện rằng phản hồi cho cuộc gọi của tôi trên đối tượng XMLHttpRequest là 401 và phản hồi bao gồm các tiêu đề WWW-Authenticate. Sau đó, nó bật lên một hộp thoại xác thực hỏi lại tên người dùng và mật khẩu.
Mọi việc đều ổn cho đến bước 3. Tôi không muốn hộp thoại bật lên, tôi muốn xử lý phản hồi 401 trong hàm gọi lại AJAX của mình. (Ví dụ: bằng cách hiển thị thông báo lỗi trên trang đăng nhập.) Tất nhiên, tôi muốn người dùng nhập lại tên người dùng và mật khẩu của họ, nhưng tôi muốn họ thấy biểu mẫu đăng nhập thân thiện, yên tâm của tôi chứ không phải biểu mẫu mặc định xấu xí của trình duyệt hộp thoại xác thực.
Ngẫu nhiên, tôi không có quyền kiểm soát máy chủ, vì vậy để nó trả về mã trạng thái tùy chỉnh (tức là một cái gì đó khác với 401) không phải là một tùy chọn.
Có cách nào để tôi có thể chặn hộp thoại xác thực không? Đặc biệt, tôi có thể chặn hộp thoại Yêu cầu Xác thực trong Firefox 2 trở lên không? Có cách nào để chặn hộp thoại Kết nối với [máy chủ] trong IE 6 trở lên không?
Chỉnh sửa
Thông tin bổ sung từ tác giả (ngày 18 tháng 9):
Tôi nên nói thêm rằng vấn đề thực sự với hộp thoại xác thực của trình duyệt bật lên là nó cung cấp không đủ thông tin cho người dùng.
Người dùng vừa nhập tên người dùng và mật khẩu qua biểu mẫu trên trang đăng nhập, anh ta tin rằng mình đã nhập chính xác cả hai và anh ta đã nhấp vào nút gửi hoặc nhấn enter. Kỳ vọng của anh ta là anh ta sẽ được đưa đến trang tiếp theo hoặc có thể được thông báo rằng anh ta đã nhập sai thông tin của mình và nên thử lại. Tuy nhiên, thay vào đó, anh ta xuất hiện với một hộp thoại bất ngờ.
Hộp thoại làm cho không có sự thừa nhận của thực tế, ông chỉ làm nhập tên người dùng và mật khẩu. Nó không nói rõ rằng đã xảy ra sự cố và anh ta nên thử lại. Thay vào đó, hộp thoại hiển thị cho người dùng thông tin khó hiểu như "Trang web nói: ' [cảnh giới] '." Nơi [cảnh giới] là một tên gọi ngắn gọn của lĩnh vực mà chỉ một lập trình viên mới có thể yêu thích.
Các nhà thiết kế web broswer lưu ý: không ai hỏi làm thế nào để chặn hộp thoại xác thực nếu bản thân hộp thoại đó thân thiện hơn với người dùng. Các toàn bộ lý do mà tôi đang làm một hình thức đăng nhập là đội ngũ quản lý sản phẩm của chúng tôi một cách đúng đắn xem xét các hộp thoại xác thực của các trình duyệt là khủng khiếp.