En meget vigtig egenskab ved enhver god medlemsside er et system til nulstilling af adgangskode, fordi nogle brugere er nødt til at glemme deres adgangskode. I denne tutorial skitserer jeg de trin, der er involveret i at gendanne en brugers adgangskode; vi vil også implementere et sådant system ved hjælp af PHP og en MySQL-database i denne tutorial.
Hele processen med at implementere et sådant system kan opdeles i 3 hovedtrin. For at lette forklaringen, lad os analysere disse trin i form af de formularer, som vi vil præsentere for brugeren at udfylde:
- Loginformular: Denne formular tager brugernavn og adgangskodekombination af en bruger og logger dem ind, hvis de er registreret på systemet. På denne formular giver vi et "Glemt din adgangskode?" link, hvis brugeren har glemt sin adgangskode og skal nulstille den.
- E-mailformular: Hvis brugeren har glemt sin adgangskode, kan de klikke på "Glemt din adgangskode?" link på login-siden for at nulstille den. Hvis du klikker på dette link, kommer de til en anden side, der beder dem om at indtaste e-mailen. Når den e-mailadresse, de angiver, ikke er i vores brugertabel i databasen, vil vi vise en fejlmeddelelse, der siger "Der findes ingen sådan bruger på vores system". Hvis brugeren på den anden side eksisterer, genererer vi et unikt token (en unik tilfældig streng) og gemmer dette token sammen med denne e-mailadresse i password_resets-tabellen i databasen. Så sender vi dem en e-mail, der har det token i et link. Når de klikker på linket i e-mailen, vi sendte dem, vil de blive sendt tilbage til vores websted på en side, der præsenterer dem med en anden formular.
- Ny adgangskodeformular: Når brugeren er tilbage på vores hjemmeside igen, griber vi tokenet, der kommer fra linket, og gemmer det i en sessionsvariabel. Så vil vi præsentere dem for en formular, der beder dem om at indtaste en ny adgangskode til deres konto på vores hjemmeside. Når den nye adgangskode er indsendt, vil vi forespørge i password_resets-tabellen for den post, der har det token, der lige kom fra linket i mailen. Hvis tokenet findes på password_resets-tabellen, så er vi sikre på, at brugeren er den, de er, og de klikkede på linket i deres mail. På dette tidspunkt griber vi nu brugerens e-mail fra password_resets (husk, at vi havde gemt tokenet ved siden af deres e-mailadresse)-tabellen og bruger denne e-mail til at hente brugeren fra brugertabellen og opdatere deres adgangskode.
Håber det er tydeligt nok. Hvis ikke, så bare bliv ved, og det vil blive tydeligere, efterhånden som vi implementerer.
Implementering
Opret en database kaldet password_recovery, og opret to tabeller i den database, nemlig brugere og password_resets med følgende felter:
brugere:
+----+-----------------+----- -+| felt | type | specifikationer |+----+------------+--------------------+| id | INT(11) | || brugernavn | VARCHAR(255) | || e-mail | VARCHAR(255) | UNIK || adgangskode | VARCHAR(255) | |+----------------+---------------+--------+
password_resets:
+----+-----------------+----- -+| felt | type | specifikationer |+----+------------+--------------------+| id | INT(11) | || e-mail | VARCHAR(255) | || token | VARCHAR(255) | UNIK |+----------------+--------------+------------+
Bemærk: Denne applikation kræver, at brugeren allerede er registreret på systemet. Men vi vil ikke dække brugerregistreringsdelen i denne vejledning, fordi den allerede er blevet dækket på dette websted. Du kan følge den tutorial først (jeg anbefaler, at du gør det) eller ej, men husk, at vi skal have en bruger i vores brugertabel i databasen, før vi kan fortsætte med at nulstille deres adgangskode. Så på den ene eller den anden måde, tilføj en bruger til din mysql-database. Du kan bruge et værktøj som PHPMyAdmin og sørge for at kryptere adgangskoden ved hjælp af md5().
Opret nu en projektmappe kaldet password-recovery, og sørg for, at denne mappe er i din servermappe (htdocs-mappe eller www-mappe). I den mappe skal du oprette tre filer, nemlig:login.php, enter_email.php, new_pass.php:
Hver af disse tre filer repræsenterer de tre trin, vi skitserede tidligere. Åbn hver af dem, og indsæt følgende koder i dem:
login.php:
Nulstilling af adgangskode PHP
enter_email.php:
Nulstilling af adgangskode PHP
new_pass.php:
Nulstilling af adgangskode PHP
I hver af disse filer kan du se, at vi inkluderer tre filer, som vi endnu ikke har oprettet, nemlig app_logic.php , messages.php,filen og main.css. Den første håndterer al logikken i vores applikation, såsom forespørgsel i databasen, afsendelse af e-mail til brugere og mere; den anden viser feedback-beskeder til brugeren, såsom når de indtaster en forkert e-mail, den tredje er stilen af applikationen.
Opret disse filer i mappen til gendannelse af adgangskode. Tilføj denne stylingkode i main.css-filen:
main.css:
body { baggrund:#3b5998; skriftstørrelse:1,1em; font-family:sans-serif;}a { text-decoration:none;}form { width:25%; margin:70px auto; baggrund:hvid; polstring:10px; border-radius:3px;}h2.form-title { text-align:center;}input { display:blok; box-sizing:border-box; bredde:100%; padding:8px;}form .form-group { margin:10px auto;}form knap { width:100%; grænse:ingen; farve:hvid; baggrund:#3b5998; polstring:15px; border-radius:5px;}.msg { margin:5px auto; kant-radius:5px; kant:1px fast rød; baggrund:pink; tekst-align:venstre; farve:brun; polstring:10px;}
app_logic.php:
link
for at nulstille din adgangskode på vores side"; $msg =wordwrap($msg,70); $headers ="Fra:[email protected]"; mail($to, $emne, $msg, $headers); header('location:pending.php?email=' . $email); }}// INDGIV ET NYT PASSWORDif (isset($_POST['new_password'])) { $new_pass =mysqli_real_escape_string($db, $_POST['new_pass']); $new_pass_c =mysqli_real_escape_string($db, $_POST['new_pass_c']); // Grib til token, der kom fra e-mail-linket $token =$_SESSION['token']; if (empty($new_pass) || empty($new_pass_c)) array_push($errors, "Adgangskode er påkrævet"); if ($new_pass !==$new_pass_c) array_push($fejl, "Adgangskoden matcher ikke"); if (count($errors) ==0) { // vælg brugerens e-mailadresse fra password_reset-tabellen $sql ="VÆLG e-mail FRA password_reset WHERE token='$token' LIMIT 1"; $resultater =mysqli_query($db, $sql); $email =mysqli_fetch_assoc($results)['e-mail']; if ($email) { $new_pass =md5($new_pass); $sql ="OPDATERING brugere SET password='$new_pass' WHERE email='$email'"; $resultater =mysqli_query($db, $sql); header('placering:index.php'); } }}?>
Her ser du tre blokke af if-udsagn. Disse udsagn håndterer tre handlinger, nemlig brugerlogin, modtagelse af nulstillede e-mails og modtagelse af ny adgangskode. I den anden blok, efter at have modtaget brugerens e-mailadresse, bliver brugeren omdirigeret til en afventende.php-side. Denne side viser blot en besked, der fortæller brugeren, at en e-mail er blevet sendt til deres e-mail-adresse, som de kan bruge til at nulstille deres adgangskode.
Opret pending.php i rodmappen i vores projekt og tilføj denne kode i den:
afventende.php:
Nulstilling af adgangskode PHP
messages.php er en fil, der indeholder kodestykket til at vise fejlmeddelelser på formularen. Åbn den og indsæt denne kode i den:
messages.php:
0) :?>
Åbn nu dette projekt i din browser på http://localhost/password-recovery/login.php og leg med det.
Bemærk: Vi brugte PHP's mail() funktion til at sende e-mail til brugeren. Denne funktion kan ikke sende mails fra localhost. Det kan kun gøres ved at bruge en server, der er hostet på internettet. Vi kan dog bruge et test-mail-program til at simulere afsendelse af e-mails, hvis du ønsker at have en demo på dit lokale system.
Konklusion
Tak fordi du fulgte denne tutorial til ende. Jeg håber, at forklaringen var klar nok, og at du lærte noget, der kan være en hjælp for dig i din webudvikling. Hvis du har problemer eller bekymringer, så glem ikke at skrive dem i kommentarerne nedenfor, så skal jeg nok komme til dig.
Hav en god dag!