douba6361 2019-07-27 03:15
浏览 138
已采纳

如何在Laravel 5.8上使用“中间件:('已验证')”时允许访客访问页面?

I want the guest to access Home and Shop page and still verifies email when a user wants to register.

Route::get('/home', 'HomeController@index')->name('home')->middleware('verified');
  • 写回答

1条回答 默认 最新

  • dounianji7883 2019-07-27 03:39
    关注

    The EnsureEmailIsVerified middleware requires the user to be logged in to access any pages protected with it.

    You can see this check in the code for the middleware

    if (!$request->user() ||
        ($request->user() instanceof MustVerifyEmail &&
            !$request->user()->hasVerifiedEmail())) {
        // reject
    }
    

    If you want to allow guests to access the page, and still require users to be activated you will need to create a custom middleware.

    php artisan make:middleware GuestOrActivated
    

    Then, for the handle function:

    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);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?