Saturday, July 2, 2022

[FIXED] How to allow guest access to page while still using "middleware:('verified')" on Laravel 5.8?

Issue

I want the guest to access Home and Shop page and still verifies email when a user wants to register.

Route::get('/home', 'HomeController@index')->name('home')->middleware('verified');

Solution

The EnsureEmailIsVerified middleware requires the user to be logged in to access any pages protected with it.

You can see this check in the code for the middleware

if (!$request->user() ||
    ($request->user() instanceof MustVerifyEmail &&
        !$request->user()->hasVerifiedEmail())) {
    // reject
}

If you want to allow guests to access the page, and still require users to be activated you will need to create a custom middleware.

php artisan make:middleware GuestOrActivated

Then, for the handle function:

public function handle($request, Closure $next, $redirectToRoute = null)
{
    if ($request->user() && $request->user() instanceof MustVerifyEmail && !$request->user()->hasVerifiedEmail()) {
        return $request->expectsJson()
            ? abort(403, 'Your email address is not verified.')
            : Redirect::route($redirectToRoute ?: 'verification.notice');
    }
    return $next($request);
}


Answered By - atymic
Answer Checked By - Gilberto Lyons (PHPFixing Admin)

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.