Email Verification and Password Reset in Laravel 12 | asadmukhtar.info
Step-by-Step Guide to Setting Up Authentication in Laravel 12 with Breeze   |   Manual Authentication in Laravel 12: Step-by-Step Guide   |   How to Build a REST API in Laravel 12 with Sanctum   |   Laravel 12 CRUD Application with Image Upload   |   Laravel 12 Multi-Auth System: Admin & User Login   |   How to Integrate Stripe Payment Gateway in Laravel 12   |   Building a Role-Based Access Control (RBAC) in Laravel 12   |   How to Use Laravel 12 Queues and Jobs for Background Tasks   |   Laravel 12 Livewire CRUD Example with Validation   |   Email Verification and Password Reset in Laravel 12   |   How to Use Laravel 12 API with Vue.js 3   |   Laravel 12 AJAX CRUD with jQuery and Bootstrap   |   Laravel 12 Multi-Language Website Setup   |   React Best Practices for 2025: Performance, SEO, and Scalability   |   How to Build a Full-Stack MERN App: A Step-by-Step Guide   |   React State Management: Redux vs. Context API vs. Recoil   |   Server-Side Rendering (SSR) in React with Next.js for SEO   |   How to Optimize React Apps for Faster Load Times   |   Building a REST API with Node.js and Express for a React App   |   Integrating JWT Authentication in React and Node.js (MERN Stack)   |   Real-time Chat App with React, Node.js, and Socket.io   |   How to Deploy a MERN Stack Application on AWS or Vercel   |   Connecting React Frontend to a Node.js Backend with Axios   |   Laravel Implement Flash Messages Example   |   How to integrate Angular 19 with Node.js and Express for full-stack development   |   Best practices for connecting Angular 19 frontend with Laravel API   |   Step-by-step guide to upgrading an existing project to Angular 19   |   How to implement authentication in Angular 19 using JWT and Firebase   |   Optimizing server-side rendering in Angular 19 with route-level render modes   |   Using Angular 19 signals for state management in large applications   |   How to create standalone components in Angular 19 for modular architecture   |   Building a CRUD application in Angular 19 with MongoDB and Express   |   Implementing lazy loading in Angular 19 to improve performance   |   How to integrate Angular 19 with GraphQL for efficient data fetching   |   Vue 3 Composition API vs Options API: A Comprehensive Comparison   |   Fetching and Displaying Data from APIs in Vue.js with Axios   |   Building a Todo App in Vue.js with Local Storage Integration   |   Handling Forms and Validation in Vue.js Using VeeValidate   |   State Management in Vue.js Applications Using Vuex   |   10 Most Important Tasks Every MERN Stack Developer Should Master   |   How to Build a Full-Stack CRUD App with MERN Stack   |   Best Practices for Authentication & Authorization in MERN Stack   |   1. MEAN Stack vs. MERN Stack: Which One Should You Choose in 2025   |   Top 10 Node.js Best Practices for Scalable and Secure Applications   |   How to Build a REST API with Laravel and Node.js (Step-by-Step Guide)   |   Mastering Angular and Express.js for Full-Stack Web Development   |   Top 10 Daily Tasks Every Frontend Developer Should Practice   |   Essential Backend Development Tasks to Boost Your Coding Skills   |   Real-World Mini Projects for Practicing React.js Daily   |   Laravel Developer Task List: Beginner to Advanced Challenges   |   How to Assign Effective Tasks to Your Intern Developers   |   10 Must-Try Tasks to Master JavaScript Fundamentals   |   Practical CSS Challenges That Improve Your UI Design Skills   |   Top Tasks to Learn API Integration in React and Angular   |   Best Task Ideas for a 30-Day Web Development Challenge   |   Top Git and GitHub Tasks Every Developer Should Know   |   30-Day Task Plan for Web Development Interns   |   Weekly Task Schedule for Junior Developers in a Startup   |   How to Track Progress with Development Tasks for Interns   |   What Tasks Should You Give to Interns in a MERN Stack Project   |   Build These 5 Projects to Master React Routing   |   Task-Based Learning: Become a Full-Stack Developer in 90 Days   |   Daily Coding Tasks That Will Sharpen Your Logical Thinking   |   Top 7 Backend Task Ideas to Practice With Node.js and MongoDB   |  

Email Verification and Password Reset in Laravel 12

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.

  1. Email Verification allows you to ensure that the email provided by a user is valid and accessible. This improves the security of your application.
  2. Password Reset allows users who have forgotten their password to reset it easily, maintaining the usability and security of your application.

In this tutorial, we will go over the steps to implement email verification and password reset in Laravel 12.

Step-by-Step Guide to Email Verification and Password Reset in Laravel 12

Step 1: Install Laravel 12

Start by creating a new Laravel project if you haven't already:

composer create-project --prefer-dist laravel/laravel laravel-email-verification

Step 2: Set Up Authentication

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:

  1. Install Laravel Breeze:

php artisan breeze:install

     2. Run the migrations

php artisan migrate

     3. Install the frontend assets:

npm install && npm run dev

Step 3: Enable Email Verification

Laravel has built-in support for email verification. To enable email verification, follow these steps:

  1. 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]);
  1. 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.

  2. 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.

Step 4: Configure Mail Settings

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.

Step 5: Set Up Password Reset Functionality

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:

  1. 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:

  1. 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)
  2. 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
  3. 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.

  4. 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.

Step 6: Testing Email Verification and Password Reset

  1. Email Verification:

    • After registering a new user, check your email inbox for a verification link.
    • Click the verification link to verify the user's email.
  2. Password Reset:

    • Go to the login page and click "Forgot Your Password?"
    • Enter the email address associated with the account and request a password reset.
    • Check your email for the reset link, click it, and set a new password.

Conclusion

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.

 


Related Tutorials

Building a Role-Based Access Control (RBAC) in Laravel 12
Email Verification and Password Reset in Laravel 12