如何在 Laravel 5.8 上仍然使用 "middleware:('verified')" 的同时允许访客访问页面?
How to allow guest access to page while still using "middleware:('verified')" on Laravel 5.8?
我希望来宾访问主页和商店页面,并且在用户想要注册时仍然验证电子邮件。
Route::get('/home', 'HomeController@index')->name('home')->middleware('verified');
EnsureEmailIsVerified
中间件要求用户登录才能访问受其保护的任何页面。
中看到此检查
if (!$request->user() ||
($request->user() instanceof MustVerifyEmail &&
!$request->user()->hasVerifiedEmail())) {
// reject
}
如果您希望允许来宾访问该页面,但仍需要激活用户,您将需要创建一个自定义中间件。
php artisan make:middleware GuestOrActivated
然后,对于 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);
}
对于这种情况,我制作了新的中间件,在重定向到电子邮件验证之前,我刷新了会话,所以当用户回到家时,他将重定向到再次登录
class GuestOrActivated
{
public function handle($request, Closure $next, $redirectToRoute = null)
{
if ($request->user() && $request->user() instanceof MustVerifyEmail && !$request->user()->hasVerifiedEmail()) {
request()->session()->flush();
return Redirect::route('verification.notice');
}
return $next($request);
}
}
我希望来宾访问主页和商店页面,并且在用户想要注册时仍然验证电子邮件。
Route::get('/home', 'HomeController@index')->name('home')->middleware('verified');
EnsureEmailIsVerified
中间件要求用户登录才能访问受其保护的任何页面。
if (!$request->user() ||
($request->user() instanceof MustVerifyEmail &&
!$request->user()->hasVerifiedEmail())) {
// reject
}
如果您希望允许来宾访问该页面,但仍需要激活用户,您将需要创建一个自定义中间件。
php artisan make:middleware GuestOrActivated
然后,对于 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);
}
对于这种情况,我制作了新的中间件,在重定向到电子邮件验证之前,我刷新了会话,所以当用户回到家时,他将重定向到再次登录
class GuestOrActivated
{
public function handle($request, Closure $next, $redirectToRoute = null)
{
if ($request->user() && $request->user() instanceof MustVerifyEmail && !$request->user()->hasVerifiedEmail()) {
request()->session()->flush();
return Redirect::route('verification.notice');
}
return $next($request);
}
}