Krish Bhardwaj
Krish Bhardwaj

Reputation: 139

Email Verification in laravel 5.7 for admin guard

I want to implement must verify in admin routes, i have admin guard and all routes related to admin, how can i achieve this functionality for admin guard in Laravel 5.7

Upvotes: 3

Views: 1848

Answers (2)

protanvir993
protanvir993

Reputation: 3109

In laravel6, laravel7, we can do it by passing route name in middleware parameter. For example:

Route::middleware('verified:admin.verification.notice')->get('/', 'AdminController@home')->name('home');

Here "dashboard.verification.notice" is the name of verify email route for my admin guard.

===================================================================

Explanation:

Take a look on "handle" method of "EnsureEmailIsVerified" middleware.

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);
}

It's 3rd parameter take the $redirectToRoute name

Upvotes: 2

anabeto93
anabeto93

Reputation: 337

This is how I got it to work for me.

  1. Create a custom middleware class and name it what you want, in my case, I named it AdminEmailIsVerified
    class AdminEmailIsVerified extends EnsureEmailIsVerified
    {
      public function handle($request, Closure $next)
      {
         if (! $request->user('admin') ||
            ($request->user('admin') instanceof Admin &&//MustVerifyEmail &&
                ! $request->user('admin')->hasVerifiedEmail())) {
            return $request->expectsJson()
                ? abort(403, 'Your email address is not verified.')
                : Redirect::route('admin.verification.notice');
          }
          return $next($request);
        }
    }

Kindly note that instance of MustVerifyEmail did not work that is why I went with Admin model.

  1. Register it in your kernel as always,

    'admin.verified' => \App\Http\Middleware\AdminEmailIsVerified::class,

    in the $routesMiddlewareGroup

    I hope this helps

Admin Dashboard - Email Verification

Upvotes: 4

Related Questions