【问题标题】:How to allow guest access to page while still using "middleware:('verified')" on Laravel 5.8?如何在 Laravel 5.8 上仍然使用“中间件:('已验证')”时允许访客访问页面?
【发布时间】:2019-12-05 07:39:33
【问题描述】:

我希望客人访问主页和商店页面,并在用户想要注册时仍然验证电子邮件。

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

【问题讨论】:

    标签: php xampp laravel-5.8


    【解决方案1】:

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

    【讨论】:

    • 是的,这是有效的。如果我以访客身份浏览网站,我没有问题。即使我使用未经验证的用户登录。但是,如果我以未经验证的用户身份登录并在地址栏中键入 /home,我仍然可以访问 /home。但这正是我要禁止的!我不希望未经验证的人浏览该网站。我怎样才能做到这一点? @atymic
    【解决方案2】:

    对于这种情况,我制作了新的中间件,在重定向到电子邮件验证之前,我刷新了会话,所以当用户回到家时,他将重新重定向到登录

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      相关资源
      最近更新 更多