我有一个Laravel路由文件(web.php
),如下所示:
Route::group(['middleware' => ['auth']], function () {
Route::get('/', function () {
return 'Hello World';
});
});
Route::get('/', 'Auth\LoginController@showLoginForm')->name('login');
在我的应用程序中,未经身份验证的主页必须转到登录屏幕。通过身份验证后,主页会更改。但是,如果我运行此代码并登录-我将获得无限重定向,因为LoginController
包含以下行:
protected $redirectTo = '/';
因此,基本上,就算Laravel should read the routes file top to bottom,这似乎也不适用于我(可能是因为::group()
)或我做错了。
我如何完成转到登录表单的首页,同时又将身份验证的用户重定向回相同的URL(/
),以使用不同的身份验证视图(并且没有重定向循环)。
谢谢!
答案 0 :(得分:0)
我将在guest中间件中处理此问题,该中间件检查经过身份验证的用户。对于这种情况,您首先需要经过身份验证的警卫检查:
use Illuminate\Contracts\Auth\Guard;
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
public function handle($request, Closure $next)
{
if ($this->auth->check()) {
return redirect('/home');
}
return $next($request);
}
将guest
中间件应用于登录端点:
Route::get('/', 'Auth\LoginController@showLoginForm')
->middleware('guest')
->name('login');
注意:仅将guest
中间件应用于访客路由,否则将存在重定向循环的风险。
答案 1 :(得分:0)
您为什么不处理此问题?
您可以简单地从web.php中删除路由声明之一。 然后继续进行条件渲染。
@auth
Show Home page
@endauth
@guest
Show Login
@endguest
我猜中间件不会阻止请求到达路由, 而是阻止请求通过。
您不能使用中间enter code here
软件来确定要命中的路线,从而造成循环。
当您考虑自下而上的处理时,laravel已经注册了每个声明的路径。