Projektując serwisy zaczynam ostrożnie podchodzić do usability. Temat jest bardzo wrażliwy, każdy webmaster to inne zdanie. Dziś chciałbym przedstawić problem logowania do serwisu. Oprócz hasła, przy logowaniu używamy:
W trosce o użytkowników w kilku moich serwisach zastosowałem możliwość logowania się na adres email lub nazwę użytkownika. Wszystko po to, aby ułatwić dostęp do ukrytej części witryny, aby nikt nie “zwątpił” bo nazwy użytkownika, lub adresu email, który podał przy zakładaniu profilu. Sam używam w sieci kilku adresów email oraz kilku prefixów i suffixów do nicka Athlan. Mam problem z zalogowaniem, gdy danie nie pasują, a potrzebuję dostęp tylko na chwilę.
Przygotujmy zatem tok myślenia programu, który pobierze dane, w zależności od tego, jakie dane podał użytkownik. Pomijam walidację hasła etc:
$aUser.$aUser.Jak możemy zauważyć, w obu przypadkach dane zapisujemy do tej samej zmiennej $aUser, więc możemy je dalej tak samo wykorzystywać. Różni się tylko pobieranie, dlateg nie trzeba w żadnym wypadku powielać kodu.
Jak słusznie zauważył devnull, należy wykluczyć możliwość użycia znaku małpy w loginie przy rejestracji użytkownika. Wyjaśnienie znajdziecie w komentarzach.
Dla programisty nie jest wiele pracy, a warto ułatwić dostęp użytkownikowi do serwisu. Usability na pierwszym miejscu ;-)
A co jeśli użytkownik jako login podał email, a email podał inny ? W takiej sytuacji jeśli pamięta tylko login to się nie zaloguje :) Oczywiście to jest tak gdybanie co by było gdyby, bo raczej mało osób używa loginu w formie emaila. Ale ja jednak wolę sprawdzanie samego emaila. Wiadomo że można mieć kilka kont pocztowych i używać różnych adresów w zależności od strony, ale chyba nie zakładasz osobnego emaila do każdej strony ? Ja loguje się tak naprawdę na 2 adresy (jeden do ważnych stron, drugi do mniej) i w paru starych mam jakiś trzeci. A zapamiętanie 3 adresów to chyba nie tak dużo ?
ps. Czemu w menu po prawej, próbujesz wypozycjonować lookme.pl pod hasłem nasza klasa ? xD
to z naszą klasą to faktycznie ciekawe :)
co do tematyki to pierwszy raz muszę przyznać że poruszasz coś sensownego tylko właśnie problemem jest to że np mamy dwóch użytkowników których odpowiednio adres e-mail i logi to:
1) login: a@a.pl
e-mail: b@b.pl
2) login:
b@b.pl
e-mail: a@a.pl
Co wtedy? pozwalając na logowanie po nicku lub mailu należy wykluczyć możliwość użycia maila (lub ciągu podobnego do maila) jako loginu, więc np wykluczyć z zestawu znaków dozwolonych dla loginu znak małpy, lub kropki – chociaż zdarza się że niektórzy z nich korzystają i znów mamy problem, bo albo ograniczamy zestaw znaków albo narażamy się na sytuację w której rozpoznanie osoby która chce się zalogować będzie niemożliwe. Dalsze rozważania pozostawiam już Tobie.
@devnul, dokładnie, zapomniałem napisać o tym pisząc notkę. Nie skupiłem się na formularzu rejestracyjnym, a to dlatego, że przeprowadzam automatyczną walidację nazwy użytkownika, pozwalając użyć tylko znaków alfanumerycznych, deski i myślnika.
Co do naszej klasy. Ehehehee :P
No, no, no. To nic śmiesznego ;-) Nieuczciwa konkurencja :P Za to można pod stołek pójść.
A wracając do sposobu autentykacji. Pomysł głupi. Albo ograniczamy logowanie do nicków, albo do emaili. devnul podał świetny przykład, kiedy system kuleje. Nie jest to żadne usability.
Tak drążąc ten temat, to może pozwolić się użytkownikowi logować po samym haśle? Jakoś na pewno się da. A jakie usability… mniam.
Nie rozumiem, w czym problem?
Przecież w zapytaniu do bazy można dać przykładowo:
SELECT * FROM uzytkownicy WHERE (login=`$_POST['uzytkownik']` OR email=`$_POST['uzytkownik']`) AND haslo=`$_POST['haslo']`;
to nam zwróci rekord z bazy z tym uzytkownikiem
natomiast przy rejestracji należy sprawdzać, czy w bazie nie ma już użytkownika o podanym loginie lub emailu (sorawdzamy także naprzemiennie: login w polu email i odwrotnie)
SELECT COUNT(*) FROM uzytkownicy WHERE login=`$_POST['uzytkownik']` OR email=`$_POST['uzytkownik']` OR login=`$_POST['email']` OR email=`$_POST['email']`;
usability jest zapewnione, no i po co wykluczać jakieś @ i inne znaki z loginu ?
tiraeth: Logowanie po samym haśle jest możliwe, ale należałoby założyć, że każdy użytkownik musi mieć inne hasło, a to raczej niezbyt dobre rozwiązanie ;-).