【发布时间】:2019-12-05 07:39:33
【问题描述】:
我希望客人访问主页和商店页面,并在用户想要注册时仍然验证电子邮件。
Route::get('/home', 'HomeController@index')->name('home')->middleware('verified');
【问题讨论】:
标签: php xampp laravel-5.8
我希望客人访问主页和商店页面,并在用户想要注册时仍然验证电子邮件。
Route::get('/home', 'HomeController@index')->name('home')->middleware('verified');
【问题讨论】:
标签: php xampp laravel-5.8
EnsureEmailIsVerified 中间件要求用户登录才能访问受它保护的任何页面。
你可以在code for the middleware看到这个检查
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);
}
}
【讨论】: