2011-08-05 15 views
10

Piszę system logowania do strony internetowej, ale gdy użytkownik dostaje dane logowania błędnie przeglądarki (próbowałem zarówno Firefox i Chrome) nadal pyta, czy użytkownik chce zapisać hasło. Jak mogę poinformować przeglądarkę, że wystąpił błąd logowania, aby wiedzieli, że nie będzie prosił użytkownika o zapisanie złych danych uwierzytelniających?Powiedz przeglądarce internetowej, że logowanie nie powiodło się, więc nie prosi o zapamiętanie hasła

Próbowałem wysyłać kody stanu HTTP 403 i 500 (zamiast normalnego 200), ale nie działają. Czy istnieje sposób, aby zrobić to, co chcę?

P.S. Nie chcę używać mechanizmu uwierzytelniania HTTP 401, ponieważ chcę używać formularza HTML do logowania, a nie okna przeglądarki.

+0

Hmm, dziwne, myślałem, że Chrome rzeczywiście oczekuje odpowiedzi 2XX, aby pokazać to okno dialogowe. –

+0

Myślę, że powinniśmy powiedzieć "twórcom przeglądarek"! :) – Mohsen

Odpowiedz

9

Patrząc na Chrome's Source Code, aby ustalić, jak to działa (patrz: OnPasswordFormsRendered), robi to heurystyki, aby to ustalić. Droga wydaje się, że robi to:

  1. użytkownik prześle formularz
  2. Poczekaj na strony ładuje się do końca
  3. jest taka sama forma nadal widoczne? Jeśli tak, załóżmy, że formularz jest prezentowany z powodu nieprawidłowej nazwy użytkownika lub hasła.

Gdy logowanie użytkownika kończy się niepowodzeniem; powinny być ponownie przedstawione w tej samej formie. Wygląda na to, że ekran "Logowanie użytkownika nie powiodło się" zbytnio różni się od oryginalnego ekranu logowania przeglądarki, aby zobaczyć, że są one tej samej formie.

Nie wygląda na to, że kod stanu HTTP ma znaczenie przy oferowaniu zapisania hasła.

Nowsze wersje Chrome take in to account kod statusu HTTP. Jeśli kod stanu zawiera się w przedziale od 400 do 600, to nie oferuje możliwości zapisania hasła.

Pozostałe szczegóły są dość dobrze udokumentowane komentarzami w tym samym pliku źródłowym.

+2

Schludny. IE10 i poniżej nie mają takiej heurystyki. – EricLaw

+0

@EricLaw: Byłbym ciekawy, jak robi to IE; ale nigdzie nie mogę znaleźć źródła ;-). – vcsjones

-1

Spróbuj http 401 nieautoryzowanego: "Podobny do 403 Niedozwolony, ale specjalnie do użytku, gdy uwierzytelnienie jest możliwe, ale nie powiodło się lub jeszcze nie zostało dostarczone." (Cytat z Wikipedii).

EDIT: przepraszam. Nie przeczytałem wystarczająco dobrze twojego pytania.

+0

10.4.2 401 Nieautoryzowane Żądanie wymaga uwierzytelnienia użytkownika. Odpowiedź ** MUSI zawierać pole nagłówka WWW-Authenticate ** (sekcja 14.47) zawierające wyzwanie dotyczące żądanego zasobu. –

Powiązane problemy