Radim login system pomocu cistog PHP koda i PDO baze, do sada sam radila samo Front-end development, pa ne mogu se snaci jos u PHP, a PDO bazu tek ucim.
Ja sam uradila sve kako je tu i taj system radi dobro, ali meni treba da se korisnik moze logovati preko usernama i emaila, u tom tutorijalu je postavljeno da se korisnik moze logovati samo preko emaila.
Ja sma pokusala uraditi ovako:
WHERE username=? AND email=?;
$stmt->bindParam(1,$username);
$stmt->bindParam(2,$email);
U sessiju sam dodala isto tako $email u bazi se nalazi username i email.
Ali to nije radilo, nije mi izbacivalo nikakvu gresku, ali nisam mogla da se ulogujem ni pomocu emaila, a ni username. Mogla sam prepraviti umjesto emaila, postaviti username i onda se logovati samo pomocu usernama, ali to mi nije bio cilj.
Ukoliko neko ima vremena i dobre volje i zeli pomoci, bila bi zahvalna. L.P
Šta si uradila prije toga?
Jesi li dodala polje username u bazi?
Možeš li postaviti kratki blok koda forme da se vidi kako očekuješ popunjenje input polja?
Tj. nisam razumio da l’ ti želiš da username i email koristiš interchangeable (odnosno, da li izbacuješ password iz forme).
Ovo može raditi jedino ako si obezbijedila uniqueness za username.
Odnosno da bi ovo radilo, ne smiješ dopustiti da se u tabeli nadju dva jednaka username-a.
Recimo da smo to već obezbijedili.
Jedino gdje si sigurna je da ako nije nešto email to će definitivno biti osnova za provjeru da l’ je validan username. Sa druge strane ako neko ima username u formi email-a onda stvari postaju još kompleksnije.
U tački 7.7 imaš funkciju
$email_exists = $user->emailExists();
Prije te linije treba da provjeriš da l’ prihvataš email formu il’ username formu.
Primjerom vodjeni, neko je kuc’o u polja email=biljana&password=pass123.
Prije pomenute linije ćeš provjeriti da li je ono što sje stiglo u parametru email ustvari email il’ username. Ja bi uradio na sljedeći način:
Nakon toga, u zavisnosti koje vrijednosti je $emailUsername varijabla, vršićeš query tog polja u tabeli.
Moguće da postoje elegntnija rješenja, ali testiraj ovo da se vidi da li radi.
I još jedna stvar, tutorijal poprilično vrlo star sad i ne koristi trenutnu standardizaciju niti naming convention call, import i ostale tipove uvriježene za industrijski standard sad. Drugim riječima tutorijal je koristio PHP 5.4 ili 5.3 pa to treba imati na unu ako ti je lokalno na XAMPP-u PHP 7.x.
WHERE (email = ? OR username = ?) and password = ?
$stmt->bindParam(1, $email);
$stmt->bindParam(2, $email);
$stmt->bindParam(3, $password);
ne treba već će taj red uporediti sa poslanom lozinkom.
Ima na postavljenom linku kako funkcioniše.
Dosta servisa radi na način da izvadi preko mejla row pa onda radi komplikovane rehash algoritme samo u slučaju ako taj red postoji.
Al’ još jednom:
tabela treba da bude funkcionalna sama po sebi, prvenstveno. email i username na sebi moraju imati unique index.
Trebalo bi da može i kompozitni index ali to je već tema specifičnija puno od teme kako da se logujem.