Laravel Email Verification Queue

User
Laravel email verification using job and queues
Assistant
To handle email verification in Laravel using jobs and queues, follow these steps:

### Step 1: Configure Queue in Laravel
Set up the queue in Laravel by choosing a queue driver in the `.env` file. For local testing, you can use `database`:

QUEUE_CONNECTION=database

Then, run the migration to create the `jobs` table:

php artisan queue:table
php artisan migrate

### Step 2: Create a Job for Sending Verification Emails
Generate a new job that will handle sending the verification email:

php artisan make:job SendEmailVerificationJob

In the generated `SendEmailVerificationJob` class, implement the `handle` method to send the email verification:

<?php

namespace AppJobs;

use AppModelsUser;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
use IlluminateSupportFacadesURL;
use IlluminateAuthNotificationsVerifyEmail;

class SendEmailVerificationJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $user;

    /**
     * Create a new job instance.
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * Execute the job.
     */
    public function handle()
    {
        $this->user->notify(new VerifyEmail());
    }
}

Here, we’re using Laravel’s built-in `VerifyEmail` notification.

### Step 3: Modify the User Registration Logic
Dispatch this job when a new user registers. In your `register` method (typically in `AuthRegisterController` or in a custom registration service/controller), add code to dispatch the job:

use AppJobsSendEmailVerificationJob;
use AppModelsUser;

public function register(Request $request)
{
    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => bcrypt($request->password),
    ]);

    // Dispatch the job to send verification email
    SendEmailVerificationJob::dispatch($user);

    return response()->json(['message' => 'Please verify your email']);
}

### Step 4: Set Up Email Verification Route
In `routes/web.php`, add a route to handle email verification:

use IlluminateFoundationAuthEmailVerificationRequest;

Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
    $request->fulfill();

    return redirect('/home');
})->middleware(['auth', 'signed'])->name('verification.verify');

### Step 5: Run the Queue Worker
To start processing jobs, run the queue worker:

php artisan queue:work

This setup will handle sending email verification through a queue, improving response time and scalability for your registration flow.

Leave a Comment

Your email address will not be published. Required fields are marked *