2010-07-26 39 views
5
  1. Tôi đang phát triển plugin Google chrome.
  2. trong trang tùy chọn Tôi đang chạy yêu cầu AJAX tới máy chủ yêu cầu PASSWORD
  3. Tôi chỉ muốn gặp lỗi nếu Mật khẩu không đúng, nhưng trình duyệt đang đưa ra một cửa sổ bật lên.

alt text http://img834.imageshack.us/img834/2905/browserproblem.pngLàm cách nào để tắt cửa sổ bật lên mật khẩu mặc định của trình duyệt?

Tôi có thể vô hiệu hóa nó và làm thế nào?

+0

bất kỳ ai? có thể đoán? – simple

Trả lời

4

Vấn đề là bạn không mã hóa Base64 tên người dùng (nghĩa là mã thông báo xác thực) và mật khẩu (giả) mà bạn đang gửi (yêu cầu của lược đồ xác thực HTTP cơ bản). Dưới đây là khoảng những gì mã của bạn phải giống như sau:

var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'http://onsip.highrisehq.com/account.xml'); 
xhr.setRequestHeader('Authorization', 'Basic ' + btoa(token + ':')); 
xhr.onreadystatechange = function() { console.log(xhr.responseText); }; 
xhr.send(); 

(. Tôi đổi chỗ ở 'onsip' như các tên miền phụ cho bạn, nhưng bạn vẫn cần phải thay thế token với thẻ xác thực của bạn)

+1

không hoàn toàn chắc chắn là trường hợp thử var xhr = new HMLHttpRequest(); xhr.open ('GET', 'UrlToServerThatUsesBasicHttpAuthentication', true, Login, WrongPassword); xhr.send(); – simple

+0

Điều gì byoogle muốn cho bạn biết có thể là sử dụng xác thực dựa trên BÀI ĐĂNG trên 37signals.com thay vì xác thực cơ bản dựa trên GET? – chx

+0

Đúng, bạn nên sử dụng “POST”. Tôi có các thông số trên bằng cách chạy gói sniffer trên trang đăng nhập Highrise, vì vậy chúng phải khớp chính xác với những gì trang gửi (nếu bạn xem nguồn trang, bạn sẽ thấy phương thức biểu mẫu được đặt thành “POST” chứ không phải “GET”). Tôi khuyên bạn nên thử sao chép các thông số tôi đang chuyển vì chúng hoạt động cho tôi. – oldestlivingboy

0

Tôi biết hai cách một có thể làm điều này trong mã XUL của Firefox (nhưng không phải mã web), một trong số đó tôi biết không áp dụng cho Google chrome, và một thử nghiệm nhanh dường như chỉ ra cái kia không.

Ba tùy chọn xảy ra với tôi.

  1. Có trang kiểm tra mật khẩu trên máy chủ có thể truy cập (lý tưởng giống như) khi truy vấn (qua kết nối an toàn tất nhiên) với chỉ báo xem kết hợp người dùng/kết quả có chính xác không. Nếu bạn không phải là những người cùng tham gia với máy chủ đang chạy dịch vụ này, tôi cảm thấy rất lo lắng khi bạn làm điều này, mặc dù hàng nghìn người cho phép facebook và cộng sự. làm điều này mọi lúc mọi nơi! Mặt khác, nó đủ thuyết phục mọi người không nên ngớ ngẩn như vậy để cho facebook et al. làm điều này mọi lúc, vì vậy một người khác làm điều tương tự sẽ không giúp ích gì.
  2. Đừng hỏi người dùng của bạn về mật khẩu của họ, lời nhắc tích hợp sẽ được sử dụng trong mọi trường hợp và là người dùng/thông qua "bình thường". Cá nhân, tôi cảm thấy hạnh phúc hơn với ý tưởng rằng bạn đang làm ngay cả khi Basic trên kênh được mã hóa so với hình thức xác thực (không hài lòng như tôi muốn với Digest hoặc mô hình khác với một số mật khẩu ẩn trong thực tế trong khi cả hai có thể thực hiện một số công cụ kỳ lạ và ngớ ngẩn với mật khẩu được gửi, trải nghiệm đã cho thấy rằng biểu mẫu có nhiều khả năng được tạo bởi người nào đó "tất nhiên tôi có thể viết mã an toàn, bạn nên nghĩ gì?" hơn bất kỳ chương trình nào khác.
  3. Nếu đó là máy chủ của riêng bạn, bạn có thể trả lời mật khẩu không chính xác bằng một số khác ngoài 401 và sử dụng mật khẩu này làm tín hiệu trong tập lệnh để truy vấn lại. Nó sẽ là tốt nhất để có một URI "đăng nhập" đặc biệt cho điều này, để không có kludge này cho XMLHttpRequest can thiệp với các máy khách tốt hơn.
+0

Re: # 3, trong hầu hết các trình duyệt, việc thiếu tiêu đề WWW-Authenticate sẽ ngăn cửa sổ bật lên xác thực ngay cả khi trạng thái là 401. Tất nhiên, trạng thái 401 không có tiêu đề WWW-Authenticate vi phạm thông số ... nhưng trở về một cái gì đó khác hơn 401 cho một sự thất bại xác thực. Đó là lý do tại sao đây là một kludge. Thực sự, đối tượng XmlHttpRequest nên có một thiết lập để vô hiệu hóa popup đó ... –

Các vấn đề liên quan