Maison  >  Article  >  cadre php  >  Comment implémenter la fonction de réinitialisation du mot de passe dans Laravel

Comment implémenter la fonction de réinitialisation du mot de passe dans Laravel

PHPz
PHPzoriginal
2023-04-21 10:05:491178parcourir

Dans les applications Web modernes, la réinitialisation du mot de passe utilisateur est une fonctionnalité essentielle. Un processus de réinitialisation de mot de passe bien conçu peut non seulement garantir la sécurité du compte de l'utilisateur, mais également améliorer l'expérience utilisateur. Laravel est un framework de développement Web PHP populaire qui intègre également un système pratique de réinitialisation de mot de passe. Cet article explique comment utiliser Laravel pour implémenter la fonction de réinitialisation de mot de passe.

Préparation de l'environnement

Avant de commencer, assurez-vous d'avoir effectué les installations suivantes :

  • PHP 7.2 et supérieur
  • Composer 2 et supérieur
  • Laravel 5.5 et supérieur

Si vous ne l'avez pas installé pourtant, Laravel peut être installé dans le terminal via la commande suivante :

composer create-project --prefer-dist laravel/laravel project-name

Processus de réinitialisation du mot de passe

Le processus de réinitialisation du mot de passe de Laravel est basé sur une notification par e-mail, les étapes sont les suivantes :

  1. L'utilisateur soumet l'adresse e-mail et le lien vers l'application qui doit réinitialiser le mot de passe Programme ;
  2. L'application envoie un e-mail avec un lien de réinitialisation à la boîte aux lettres de l'utilisateur ;
  3. L'utilisateur accède au lien e-mail
  4. L'application détermine si le lien est expiré et légal ;
  5. Si le lien est légal, un formulaire de saisie d'un mot de passe apparaît sur la page ;
  6. L'utilisateur remplit un nouveau mot de passe ;
  7. L'utilisateur soumet le formulaire ;
  8. L'application réinitialise le mot de passe de l'utilisateur.

Par conséquent, nous devons mettre en œuvre chaque étape de ce processus.

Configuration du courrier

Tout d'abord, nous devons configurer le courrier dans Laravel. Ouvrez le fichier .env et ajoutez-y la configuration suivante : .env 文件,在其中添加如下配置:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mxhichina.com
MAIL_PORT=25
MAIL_USERNAME=youremail@example.com
MAIL_PASSWORD=yourpassword
MAIL_FROM_ADDRESS=youremail@example.com
MAIL_ENCRYPTION=

这里的配置需要根据您的实际情况进行修改,MAIL_DRIVER 指定了使用的邮件服务提供商,例如 smtpmailgunsendmail 等,这里我们使用了阿里云邮件服务提供商 smtp.mxhichina.com,并且需要填写您的邮箱用户名和密码。MAIL_FROM_ADDRESS 用于指定发送邮件的发送地址。

接下来,我们需要在 config/mail.php 文件中配置邮件发送选项,例如设置发件人名称和地址:

'from' => [
    'address' => env('MAIL_FROM_ADDRESS', 'youremail@example.com'),
    'name' => env('MAIL_FROM_NAME', 'Your Name'),
],

路由配置

现在,我们需要配置路由来处理密码重置操作。在 Laravel 中,我们可以使用自带的 Password 控制器来处理重置密码的逻辑。打开 routes/web.php 文件,添加以下路由:

// Password Reset Routes
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');

这里我们在 Auth 中使用了两个控制器,分别是 ForgotPasswordControllerResetPasswordController,分别处理重置密码邮件发送和密码重置操作。

视图配置

接下来,我们需要添加视图来展示用户填写邮箱和密码的表单。我们可以使用类似以下代码片段的 Blade 模板代码实现:

<form method="POST" action="{{ route(&#39;password.email&#39;) }}">
    @csrf
    <div>
        <input type="email" name="email" value="{{ old(&#39;email&#39;) }}" required autofocus placeholder="请输入您的邮箱地址">
    </div>
    <div>
        <button type="submit">发送重置密码链接</button>
    </div>
</form>

在这个页面中,我们使用了一个表单来接受用户填写的邮箱地址,并且添加了一个发送按钮,点击这个按钮将会向该邮箱发送密码重置链接。

我们还需要添加另一个视图来允许用户输入新密码。类似以下代码片段可以用于实现一个这样的表单:

<form method="POST" action="{{ route(&#39;password.update&#39;) }}" >
    @csrf
    <input type="hidden" name="token" value="{{ $token }}">
    <div>
        <label for="email-input">邮箱</label>
        <input type="email" name="email" value="{{ $email ?? old(&#39;email&#39;) }}" required autofocus>
    </div>
    <div>
        <label for="password-input">新密码</label>
        <input type="password" name="password" required>
    </div>
    <div>
        <label for="password-confirm-input">确认新密码</label>
        <input type="password" name="password_confirmation" required>
    </div>
    <div>
        <button type="submit">重置密码</button>
    </div>
</form>

这个表单需要用户填写新密码和确认密码,并且需要通过 $token$email 参数来验证重置链接是否合法。这些参数可以在 ResetPasswordController@showResetForm 中获取。

控制器逻辑

我们在路由中使用了两个控制器来处理密码重置操作,分别是 ForgotPasswordControllerResetPasswordController

ForgotPasswordController 提供了一个 showLinkRequestForm() 方法,用于展示用户填写邮箱地址的表单。另外一个方法 sendResetLinkEmail() 将会向用户提供的邮箱地址发送含有密码重置链接的邮件,其中使用了 Password::sendResetLink() 方法来处理重置链接的生成和发送。

ResetPasswordController 中的 showResetForm() 方法将会展示用户输入新密码的表单,如果重置链接不合法则会返回到邮件链接过期的提示页面。reset() 方法则处理了用户填写重置密码表单并提交的逻辑,其中使用了 Password::reset()

use Illuminate\Support\Facades\Password;

class ForgotPasswordController extends Controller
{
    use SendsPasswordResetEmails;
}

class ResetPasswordController extends Controller
{
    use ResetsPasswords;

    protected $redirectTo = '/home';

    public function showResetForm(Request $request, $token = null)
    {
        return view('auth.passwords.reset')->with(
            ['token' => $token, 'email' => $request->email]
        );
    }
}
La configuration ici doit être modifiée en fonction de votre situation réelle. MAIL_DRIVER spécifie le fournisseur de services de messagerie utilisé. . Par exemple, smtp, mailgun ou sendmail, etc. Ici, nous utilisons le fournisseur de services de messagerie Alibaba Cloud smtp.mxhichina.com<.>, et vous devez renseigner votre nom d'utilisateur et votre mot de passe de messagerie. <code>MAIL_FROM_ADDRESS est utilisé pour spécifier l'adresse d'envoi pour l'envoi des emails.

Ensuite, nous devons configurer les options d'envoi d'e-mails dans le fichier config/mail.php, telles que la définition du nom et de l'adresse de l'expéditeur : rrreee

Configuration du routage

  1. Maintenant, nous avons besoin pour configurer Route pour gérer les opérations de réinitialisation de mot de passe. Dans Laravel, nous pouvons utiliser le contrôleur de mot de passe intégré pour gérer la logique de réinitialisation des mots de passe. Ouvrez le fichier routes/web.php et ajoutez les routes suivantes :
  2. rrreee
  3. Ici, nous utilisons deux contrôleurs dans Auth, à savoir ForgotPasswordController et ResetPasswordController
gère respectivement l'envoi d'e-mails de réinitialisation de mot de passe et les opérations de réinitialisation de mot de passe.
  • Afficher la configuration
  • Ensuite, nous devons ajouter une vue pour afficher le formulaire permettant aux utilisateurs de remplir leur email et leur mot de passe. Nous pouvons utiliser le code du modèle Blade similaire à l'extrait de code suivant pour y parvenir :
  • rrreeeDans cette page, nous utilisons un formulaire pour accepter l'adresse e-mail renseignée par l'utilisateur, et ajoutons un bouton d'envoi pour envoyer un. message à l’adresse e-mail. Lien de réinitialisation du mot de passe.

    Nous devons également ajouter une autre vue pour permettre à l'utilisateur de saisir un nouveau mot de passe. Un extrait de code similaire au suivant peut être utilisé pour implémenter un tel formulaire :

    rrreeeCe formulaire nécessite que l'utilisateur remplisse un nouveau mot de passe et confirme le mot de passe, et nécessite le $token et le $email pour vérifier que le lien de réinitialisation est légitime. Ces paramètres peuvent être obtenus dans ResetPasswordController@showResetForm.

    🎜Logique du contrôleur🎜🎜🎜Nous utilisons deux contrôleurs dans le routage pour gérer les opérations de réinitialisation de mot de passe, à savoir ForgotPasswordController et ResetPasswordController. 🎜🎜ForgotPasswordController fournit une méthode showLinkRequestForm() pour afficher un formulaire permettant aux utilisateurs de remplir leur adresse e-mail. Une autre méthode sendResetLinkEmail() enverra un e-mail contenant un lien de réinitialisation du mot de passe à l'adresse e-mail fournie par l'utilisateur. La méthode Password::sendResetLink() est utilisée pour gérer le. réinitialiser le lien. Configurer la génération et l'envoi des liens. 🎜🎜La méthode showResetForm() dans ResetPasswordController affichera le formulaire permettant à l'utilisateur de saisir un nouveau mot de passe. Si le lien de réinitialisation est illégal, il reviendra au lien de courrier électronique. page d’invite d’expiration. La méthode reset() gère la logique selon laquelle l'utilisateur remplit le formulaire de réinitialisation du mot de passe et le soumet. La méthode Password::reset() est utilisée pour mettre à jour le mot de passe de l'utilisateur. à la base de données au milieu. 🎜rrreee🎜🎜Utilisation de la fonction de réinitialisation du mot de passe🎜🎜🎜Maintenant que nous avons terminé l'implémentation de la fonction de réinitialisation du mot de passe dans Laravel, essayons d'utiliser la fonction implémentée pour réinitialiser le mot de passe : 🎜🎜🎜Ouvrez la page de connexion de l'application, cliquez sur Mot de passe oublié ; 🎜🎜 Entrez votre adresse e-mail enregistrée et cliquez sur le bouton Envoyer le lien de réinitialisation du mot de passe ; 🎜🎜 Ouvrez votre e-mail, recherchez et cliquez sur le lien de réinitialisation du mot de passe ; 🎜🎜 Cliquez sur ; le bouton Soumettre. 🎜🎜🎜Si tout se passe bien, votre mot de passe a été réinitialisé avec succès ! 🎜🎜🎜Résumé🎜🎜

    Dans cet article, nous expliquons comment implémenter une fonction de réinitialisation de mot de passe de base à l'aide de Laravel. Dans les applications Web modernes, la réinitialisation du mot de passe est une fonction nécessaire. Seul un processus de réinitialisation du mot de passe bien conçu et mis en œuvre peut garantir la sécurité des comptes utilisateur et de l'expérience utilisateur. Je pense qu'après avoir appris les techniques décrites dans cet article et implémenté la fonction complète de réinitialisation du mot de passe, la sécurité du mot de passe de l'utilisateur et son expérience utilisateur seront améliorées.

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn