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