我想在管理员路由中实现必须验证,我有管理员防护和与管理员相关的所有路由,我如何在 Laravel 5.7 中为管理员防护实现此功能
问问题
1555 次
2 回答
4
这就是我让它为我工作的方式。
- 创建一个自定义中间件类并将其命名为您想要的名称,在我的例子中,我将其命名为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模型的原因。
像往常一样在你的内核中注册它,
'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 回答