Heim >Backend-Entwicklung >PHP-Tutorial >So senden Sie E-Mails zur Benutzerauthentifizierung in PHP

So senden Sie E-Mails zur Benutzerauthentifizierung in PHP

*文
*文Original
2017-12-23 13:32:174859Durchsuche

Websites müssen manchmal eine E-Mail-Verifizierung verwenden, um Benutzer vor böswilliger Registrierung, Identitätsüberprüfung und anderen Vorgängen zu schützen. Aber wie nutzt man das PHP-Backend zum Versenden von Bestätigungs-E-Mails? In diesem Artikel wird anhand einer Reihe von Registrierungsbeispielen erläutert, wie PHP E-Mails sendet.

Eine der häufigsten Sicherheitsüberprüfungen bei der Benutzerregistrierung ist die E-Mail-Überprüfung. Gemäß der allgemeinen Branchenpraxis ist die E-Mail-Verifizierung eine sehr wichtige Vorgehensweise, um potenzielle Sicherheitsrisiken zu vermeiden. Lassen Sie uns nun diese Best Practices besprechen und sehen, wie man eine E-Mail-Verifizierung in PHP erstellt.

Beginnen wir mit einem Registrierungsformular:

<form method="post" action="http://mydomain.com/registration/">
    <fieldset>
        <label for="fname">First Name:</label>
        <input type="text" name="fname" required />
    </fieldset>
    <fieldset>
        <label for="lname">Last Name:</label>
        <input type="text" name="lname" required />
    </fieldset>
    <fieldset>
        <label for="email">Last name:</label>
        <input type="email" name="email" required />
    </fieldset>
    <fieldset>
        <label for="password">Password:</label>
        <input type="password" name="password" required />
    </fieldset>
    <fieldset>
        <label for="cpassword">Confirm Password:</label>
        <input type="password" name="cpassword" required />
    </fieldset>
    <fieldset>
        <button type="submit">Register</button>
    </fieldset>
</form>


Als nächstes folgt die Tabellenstruktur der Datenbank:

CREATE TABLE IF NOT EXISTS `user` (
    `id` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `fname` VARCHAR(255) ,
    `lname` VARCHAR(255) ,
    `email` VARCHAR(50) ,
    `password` VARCHAR(50) ,
    `is_active` INT(1) DEFAULT &#39;0&#39;,
    `verify_token` VARCHAR(255) ,
    `created_at` TIMESTAMP,
    `updated_at` TIMESTAMP,
);


Sobald dieses Formular abgeschickt wurde, müssen wir die Eingaben des Benutzers validieren und einen neuen Benutzer erstellen:

// Validation rules
$rules = array(
    &#39;fname&#39; => &#39;required|max:255&#39;,
    &#39;lname&#39; => &#39;required|max:255&#39;,
    &#39;email&#39; => &#39;required&#39;,
    &#39;password&#39; => &#39;required|min:6|max:20&#39;,
    &#39;cpassword&#39; => &#39;same:password&#39;
);
$validator = Validator::make(Input::all(), $rules);
// If input not valid, go back to registration page
if($validator->fails()) {
    return Redirect::to(&#39;registration&#39;)->with(&#39;error&#39;, $validator->messages()->first())->withInput();
}
$user = new User();
$user->fname = Input::get(&#39;fname&#39;);
$user->lname = Input::get(&#39;lname&#39;);
$user->password = Input::get(&#39;password&#39;);
// You will generate the verification code here and save it to the database
// Save user to the database
if(!$user->save()) {
    // If unable to write to database for any reason, show the error
    return Redirect::to(&#39;registration&#39;)->with(&#39;error&#39;, &#39;Unable to write to database at this time. Please try again later.&#39;)->withInput();
}
// User is created and saved to database
// Verification e-mail will be sent here
// Go back to registration page and show the success message
return Redirect::to(&#39;registration&#39;)->with(&#39;success&#39;, &#39;You have successfully created an account. The verification link has been sent to e-mail address you have provided. Please click on that link to activate your account.&#39;);

Nach der Registrierung bleibt das Konto des Benutzers ungültig, bis der Benutzer eine E-Mail erhält ist verifiziert. Diese Funktion bestätigt, dass der Benutzer der Eigentümer der eingegebenen E-Mail-Adresse ist und trägt dazu bei, Spam und unbefugte E-Mail-Nutzung und Informationsoffenlegung zu verhindern.

Der gesamte Vorgang ist sehr einfach: Wenn ein neuer Benutzer erstellt wird, wird eine E-Mail mit einem Bestätigungslink an die E-Mail-Adresse gesendet, die der Benutzer während des Registrierungsprozesses eingegeben hat. Bevor der Benutzer auf den E-Mail-Bestätigungslink klickt und die E-Mail-Adresse bestätigt, kann er sich nicht anmelden und die Website-Anwendung nicht verwenden.

Bei verifizierten Links gibt es mehrere Dinge zu beachten. Der verifizierte Link muss einen zufällig generierten Token enthalten, der lang genug und nur für einen bestimmten Zeitraum gültig ist. Dies geschieht, um Netzwerkangriffe zu verhindern. Gleichzeitig muss die E-Mail-Verifizierung auch die eindeutige Kennung des Benutzers enthalten, um potenzielle Gefahren durch Angriffe mehrerer Benutzer zu vermeiden.

Jetzt sehen wir uns an, wie man in der Praxis einen Verifizierungslink generiert:

// We will generate a random 32 alphanumeric string
// It is almost impossible to brute-force this key space
$code = str_random(32);
$user->confirmation_code = $code;


Sobald diese Verifizierung erstellt ist, speichern Sie sie in der Datenbank und senden Sie sie an die Benutzer:

Mail::send(&#39;emails.email-confirmation&#39;, array(&#39;code&#39; => $code, &#39;id&#39; => $user->id), function($message)
{
$message->from(&#39;my@domain.com&#39;, &#39;Mydomain.com&#39;)->to($user->email, $user->fname . &#39; &#39; . $user->lname)->subject(&#39;Mydomain.com: E-mail confirmation&#39;);
});


Inhalt der E-Mail-Verifizierung:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
    </head>
    <body>
        <p style="margin:0">
            Please confirm your e-mail address by clicking the following link:
            <a href="http://mydomain.com/verify?code=<?php echo $code; ?>&user=<?php echo $id; ?>"></a>
        </p>
    </body>
</html>


Jetzt lassen Sie uns überprüfen, ob es funktioniert :

$user = User::where(&#39;id&#39;, &#39;=&#39;, Input::get(&#39;user&#39;))
            ->where(&#39;is_active&#39;, &#39;=&#39;, 0)
            ->where(&#39;verify_token&#39;, &#39;=&#39;, Input::get(&#39;code&#39;))
            ->where(&#39;created_at&#39;, &#39;>=&#39;, time() - (86400 * 2))
            ->first();
if($user) {
    $user->verify_token = null;
    $user->is_active = 1;
    if(!$user->save()) {
        // If unable to write to database for any reason, show the error
        return Redirect::to(&#39;verify&#39;)->with(&#39;error&#39;, &#39;Unable to connect to database at this time. Please try again later.&#39;);
    }
    // Show the success message
    return Redirect::to(&#39;verify&#39;)->with(&#39;success&#39;, &#39;You account is now active. Thank you.&#39;);
}
// Code not valid, show error message
return Redirect::to(&#39;verify&#39;)->with(&#39;error&#39;, &#39;Verification code not valid.&#39;);


Fazit:

Der oben gezeigte Code ist nur ein Tutorial-Beispiel und wurde nicht ausreichend getestet. Bitte testen Sie es, bevor Sie es in Ihrer Webanwendung verwenden. Der obige Code wird im Laravel-Framework erstellt, Sie können ihn jedoch problemlos auf andere PHP-Frameworks migrieren. Gleichzeitig ist der Verifizierungslink 48 Stunden lang gültig und verfällt danach. Durch die Einführung einer Arbeitswarteschlange können abgelaufene Verifizierungslinks zeitnah bearbeitet werden.

Verwandte Empfehlungen:

PHP-Verifizierungscode vollständig, PHP-Verifizierungscode generieren, PHP-SMS-Verifizierungscode, PHP-Verifizierungscode-Code

Beispielcode der PHP-SMS-Schnittstelle (erste Schritte)

PHP-SMS-Gateway SMS-Inhalte dürfen keine Leerzeichen enthalten, SMS Gateway-SMS-Inhalt_PHP-Tutorial

Das obige ist der detaillierte Inhalt vonSo senden Sie E-Mails zur Benutzerauthentifizierung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn