How to enable email verification support in Laravel

Razet · · 2441 Views

As we all know, an email confirmation is a must-have feature for the most web application. That is the inbuilt solution for us after the Laravel v5.7 release, and we can easily implement this into Laravel projects.

So let’s get started:

Create a new Laravel Project

Run the following command to create a new Laravel project:

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

Database Setup:

Update database credentials in the .env file:


Next, run the migration command to create tables in the database:

php artisan migrate

If you look at the database, you should get tables created accordingly and most specifically check out the users table, it has a new field added from Laravel that is email_verified_at. It is going to store date-time value when the user has verified their email.

Frontend Scaffolding

If you are using Laravel version below v6 then just run php artisan make:auth and it is done, your frontend scaffolding is ready.

If your Laravel version is v6 or above first you have to install laravel/ui package. To install it run the following command in your terminal:

composer require laravel/ui

After that, to install the frontend scaffolding run the following command:

php artisan ui bootstrap --auth

In the views directory, you will see a blade file that is resources/views/auth/verify.blade.php. This is view user is going to see when they are logged in but not verified there email address.

Prepare User Model

Next, we need to update the User model to implement MustVerifyEmailContract.


namespace App;
use Illuminate\Auth\MustVerifyEmail;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Contracts\Auth\MustVerifyEmail as MustVerifyEmailContract;
class User extends Authenticatable implements MustVerifyEmailContract
    use Notifiable;
     * The attributes that are mass assignable.
     * @var array
    protected $fillable = [
        'name', 'email', 'password',
     * The attributes that should be hidden for arrays.
     * @var array
    protected $hidden = [
        'password', 'remember_token',

Enable Verification on Routing

Next will have to provide a parameter to the Auth::routes(); to add an email verification route.

Route::get('/', function () {
    return view('welcome');
Auth::routes(['verify' => true]);
Route::get('/home', 'HomeController@index')->name('home');

Protect Routes

Laravel has new route middleware available for us. To use that simply do the same as we always do when whenever we use middleware with the controller, add new verified middleware into the constructor as showing below:

namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
     * Create a new controller instance.
     * @return void
    public function __construct()
        $this->middleware(['auth', 'verified']);
     * Show the application dashboard.
     * @return \Illuminate\Http\Response
    public function index()
        return view('home');

Email Driver Setup

Next, you need to set up email drivers for the project, there are several ways are provided in Laravel such as SMTP, Mailgun, Mandrill, Sparkpost, etc.

Update the .env file with your preferred email driver.


Test Email Verification Support

Now every configuration is done. And it's time to test it. So, create a new account see how does this implementation works. 

After register, you should get redirected to the verify view, where it says verify your email address. Check your email inbox for the verification email. Click the verification link and you will be redirected to the home page.


Please login or create new account to add your comment.

You may also like:

Laravel Pint & VS Code: Automate Your Code Formatting

Laravel Pint is an opinionated PHP code style fixer built on top of PHP-CS-Fixer, designed to simplify the process of ensuring clean and consistent code style in Laravel projects. (...)
Harish Kumar

Laravel Clockwork: A Deep Dive into Debugging, Profiling Skills and Best Practices

In the world of web development, building complex applications often comes with the challenge of identifying and resolving performance bottlenecks. This is where a reliable debugging (...)
Harish Kumar

Effortless PDF Generation in Laravel: A Guide to Using Spatie/Browsershot Package

Looking to generate or export PDF files using Laravel? Look no further! In this article, we'll guide you through using the Laravel spatie/browsershot package to seamlessly convert (...)
Harish Kumar

Part #3: Rule objects based custom validation in Laravel

Laravel comes with multiple ways to add custom validation rules to validate form request inputs. I have already explained some of the ways in the following article links:
Harish Kumar

Part #2: How to use Laravel's Validator::extend method for custom validation

Validation is important in any application as it validates a form before performing actions on it. It allows the user to know their input is accurate and confident about the operation (...)
Harish Kumar

Part #1: Closure-based Custom Laravel Validation

While I was working with Laravel, validation using closure came to my mind, and I know it will be helpful to you. This tutorial assists you with all what is the difference between (...)
Harish Kumar