簡體   English   中英

Laravel 中的可選 Email 驗證

[英]Optional Email Verification in Laravel

如何在 Laravel 中使 email 驗證成為可選? 我有一條可以作為訪客訪問的路線。 但是,我希望所有經過身份驗證的用戶在訪問網站的任何部分(包括可以以訪客身份訪問的頁面)時都經過 email 驗證。

如果我要在所有路由上添加middleware('verified') ,訪客需要登錄才能訪問這些公共頁面。

例子:

Route //posts/1可以作為訪客訪問。 但是,如果用戶已登錄,我希望他們首先經過 email 驗證才能訪問它。

EnsureEmailIsVerified ( verified ) 中間件檢查用戶是否已通過身份驗證,這就是為什么它對來賓用戶不起作用的原因。

您可以創建一個新的中間件 class 稱為EnsureEmailIsVerifiedUnlessGuest (或任何您想要的):

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::guest(URL::route($redirectToRoute ?: 'verification.notice'));
    }

    return $next($request);
}

然后將其添加到app/Http/Kernel.php文件中的$routeMiddleware數組中:

'verified-or-guest' => \App\Http\Middleware\EnsureEmailIsVerifiedUnlessGuest::class,

然后你可以將它與你的路線一起使用

->middleware('verified-or-guest')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM