Laravel RedirectIfAuthenticated中间件的意义是什么

jogvjijk  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(121)

我发现很难理解这个中间件app/Http/Middleware/RedirectIfAuthenticated

public function handle(Request $request, Closure $next, ...$guards)
{
    $guards = empty($guards) ? [null] : $guards;

    foreach ($guards as $guard) {
        if (Auth::guard($guard)->check()) {
            return redirect(RouteServiceProvider::HOME);
        }
    }

    return $next($request);
}

特别是if条件。有人创建了一个[null]保护,它总是无法通过if检查,那么为什么不简单地使用[]来完全避免循环呢?
此外,这个句柄方法只在用户未通过身份验证时执行,所以也许它应该被命名为RedirectIfUnauthenticated
然而,将用户重定向到/login页面的逻辑并不存在,它已经在其他地方实现了。
那么这个中间件的用例是什么呢?我想我必须实现一个只应用于未经身份验证的请求的保护?但是return redirect对经过身份验证的主页有什么意义呢?

juud5qan

juud5qan1#

此外,这个句柄方法只在用户未通过身份验证时执行,所以也许它应该被命名为RedirectIfUnauthenticated?
这是不正确的,它的执行时,'客人'中间件指定的路由。
Auth::guard(null)->check()并不总是返回false。当访问一个有'guest'中间件的页面时,但用户已通过身份验证。
这就是为什么LoginController将此应用于除注销之外的所有登录路由,以便在访问针对未经身份验证的用户的页面时重定向IfAuthenticated。
我把它和app/Http/Middleware/Authenticate.php弄混了,现在我把它重命名为RedirectIfUnauthenticated,其中redirectTo方法只在用户没有经过身份验证并且需要重定向时运行,因为你决定在路由上放置'auth'中间件。

相关问题