réponses
29 vues
confirmation d'adresse mail
Salut la communauté. je veux impléter un systhème de confirmation d'email dans laravel, je travail sur la version 12, je suis en production et je veux qu'il s'agisse des emails réels, comment faire? NB: je ne travail pas avec blade, je travils avec les api


Tout dépend de la manière avec laquelle tu veux faire ta vérification de courriel. tu peux premièrement utiliser un système où tu envoies un code OTP à l'utilisateur à partir d'un mail et ensuite dans le mail contiendra un lien avec le code OTP. et une date d'expiration que tu auras eu à stocker un BD. lorsqu'il ouvrira le lien si le TP est encore valide par rapport à la date d'expiration que tu as décidé alors tu mets une valuer au champ email_verified_at
.


Ou alors tu peux utiliser les methodes preconcus de Laravel (et meme les customiser a ta guise).
// Dans ton controlleurif (! $user->hasVerifiedEmail()) { $user->sendEmailVerificationNotification();}
La methode sendEmailVerificationNotification
est deja definii par defaut et utilise aussi les templates de mail par defaut de Laravel, si tu veux les customiser
// Model User use App\Notifications; class User extends Authenticable //...{ public function sendEmailVerificationNotification() { $this->notify(new Notifications\EmailVerificationNotification); }}
EmailVerificationNotification
<?php namespace App\Notifications; use Carbon\Carbon;use Illuminate\Auth\Notifications\VerifyEmail;use Illuminate\Bus\Queueable;use Illuminate\Notifications\Messages\MailMessage;use Illuminate\Notifications\Notification;use Illuminate\Support\Facades\URL; class EmailVerificationNotification extends VerifyEmail{ // use Queueable; public function via($notifiable): array { return ['mail']; } // Je refais pour que le lien du mail redirige vers le front public function toMail($notifiable) { $frontendUrl = env('FRONTEND_URL'); $verificationUrl = $this->verificationUrl($notifiable); // Remplacer l'URL backend par celle du frontend $customUrl = "{$frontendUrl}/verify-email?url=".urlencode($verificationUrl); return (new MailMessage) ->subject(__('notifications.email_verification_subject')) ->line(__('notifications.email_verification_line')) ->action(__('notifications.email_verification_action'), $customUrl) ->line(__('notifications.email_verification_no_action')); } // Je refais cette methode car j'ai custom la route de verification d'email protected function verificationUrl($notifiable) { if (static::$createUrlCallback) { return call_user_func(static::$createUrlCallback, $notifiable); } return URL::temporarySignedRoute( 'user:verification.verify', // ICI... Carbon::now()->addMinutes(60), [ 'id' => $notifiable->getKey(), 'hash' => sha1($notifiable->getEmailForVerification()), ] ); }}
Apres ceci tu n'as qu'a faire les routes (les miennes sont API).
api.php
Route::prefix('user')->as('user:')->group(function(){ Route::post('/send-verification-mail', [Api\UserController::class, 'resend'])->middleware('throttle:6,1')->name('verifcation.send'); Route::post('/email/verify/{id}/{hash}', [Api\UserController::class, 'verifyEmail'])->middleware('signed')->name('verification.verify');});
Tu dois preciser le middleware signed
sur la route de verification.
D'accord, merci. Sinon, je n'aurais rien à configuré dans le fihchier .env?
Il faut Se connecter ou Créer un compte pour participer à cette conversation.