In any modern web application, user authentication is essential, and email verification and password reset are common features. Laravel 12 provides out-of-the-box solutions to handle both of these functionalities.
In this tutorial, we will go over the steps to implement email verification and password reset in Laravel 12.
Start by creating a new Laravel project if you haven't already:
composer create-project --prefer-dist laravel/laravel laravel-email-verification
Laravel provides a simple authentication system that includes features like login, registration, and password reset. You can use Laravel Breeze, Laravel Jetstream, or Laravel UI to set up authentication.
For simplicity, we'll use Laravel Breeze:
Install Laravel Breeze:
php artisan breeze:install
2. Run the migrations
php artisan migrate
3. Install the frontend assets:
npm install && npm run dev
Laravel has built-in support for email verification. To enable email verification, follow these steps:
Ensure that your User
model implements the MustVerifyEmail interface. Open app/Models/User.php
and make sure it looks like this:
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;
}
Next, ensure your routes are configured to handle email verification. Open routes/web.php
and make sure the following route is added:
Auth::routes(['verify' => true]);
In your User Registration Controller, make sure the user is redirected to a specific page after registration. The default behavior in Laravel is to automatically send an email verification link after the user registers.
To test, after a user registers, they will receive an email with a verification link. You can customize the email template by editing resources/views/vendor/notifications/verify.blade.php
.
To enable email verification, you need to configure your mail settings. Open the .env
file and add your mail configuration:
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@yourapp.com
MAIL_FROM_NAME="${APP_NAME}"
If you don’t have a MailTrap account, you can use a service like Mailgun, SendGrid, or SMTP for testing purposes.
Laravel comes with built-in functionality for handling password resets. You don’t need to write much code to enable this feature. Here’s how you can set it up:
Ensure your User model already includes the Notifiable trait (this should already be in place with Breeze or Jetstream).
use Illuminate\Notifications\Notifiable;
Laravel includes password reset routes by default. The following routes should already be in routes/web.php
:
use Illuminate\Notifications\Notifiable;
Laravel includes password reset routes by default. The following routes should already be in routes/web.php
:
This route set includes the necessary routes for password resets such as:
password.request
(to show the "Forgot Your Password?" form)password.email
(to send the password reset link)password.reset
(to handle resetting the password)Make sure the Forgot Password and Reset Password views exist. These views are typically provided by Breeze or Jetstream. They are located in:
resources/views/auth/forgot-password.blade.php
resources/views/auth/reset-password.blade.php
When users click on the “Forgot Password?” link, they will be sent an email with a password reset link. The password reset functionality is handled via the Password::sendResetLink()
method provided by Laravel.
Password Reset Controller: The controller is automatically set up when you use Breeze or Jetstream. However, you can customize the controller logic in app/Http/Controllers/Auth/ForgotPasswordController.php
and app/Http/Controllers/Auth/ResetPasswordController.php
if needed.
Email Verification:
Password Reset:
In this tutorial, we implemented email verification and password reset in Laravel 12. Laravel's built-in authentication features make it very easy to handle common user authentication tasks like verifying email addresses and resetting passwords.
By enabling email verification, you ensure that users are using a valid email address and can receive important notifications. The password reset feature allows users to recover access to their accounts, improving user experience and security.
Laravel provides an easy-to-use and secure way to handle both of these tasks, and with minimal code, you can integrate them into your application seamlessly.