3

我想在管理员路由中实现必须验证,我有管理员防护和与管理员相关的所有路由,我如何在 Laravel 5.7 中为管理员防护实现此功能

4

2 回答 2

4

这就是我让它为我工作的方式。

  1. 创建一个自定义中间件类并将其命名为您想要的名称,在我的例子中,我将其命名为AdminEmailIsVerified
    AdminEmailIsVerified 类扩展 EnsureEmailIsVerified
    {
      公共函数句柄($request, Closure $next)
      {
         if (!$request->user('admin') ||
            ($request->user('admin') instanceof Admin &&//MustVerifyEmail &&
                !$request->user('admin')->hasVerifiedEmail())) {
            返回 $request->expectsJson()
                ? abort(403, '您的电子邮件地址未通过验证。')
                : 重定向::route('admin.verification.notice');
          }
          返回 $next($request);
        }
    }

请注意,这instance of MustVerifyEmail不起作用,这就是我使用Admin模型的原因。

  1. 像往常一样在你的内核中注册它,

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

    $routesMiddlewareGroup

    我希望这有帮助

管理员仪表板 - 电子邮件验证

于 2018-12-10T23:37:03.260 回答
2

在 laravel6、laravel7 中,我们可以通过在中间件参数中传递路由名称来实现。例如:

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

这里“dashboard.verification.notice”是我的管理员警卫验证电子邮件路由的名称。

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

解释:

看一下“EnsureEmailIsVerified”中间件的“handle”方法。

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

它的第三个参数采用 $redirectToRoute 名称

于 2020-01-17T14:50:33.067 回答