【问题标题】:Laravel Routing Order Multiple "Homepages" Based On AuthLaravel 基于 Auth 的路由排序多个“主页”
【发布时间】:2019-09-24 20:29:22
【问题描述】:

我有一个 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 (/) 以获得不同的经过身份验证的视图(并且没有重定向循环)。

谢谢!

【问题讨论】:

    标签: laravel routing laravel-5.8


    【解决方案1】:

    我会在检查经过身份验证的用户的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 中间件应用于访客路由,否则您将面临重定向循环的风险。

    【讨论】:

    • 我用guest 中间件试过这个,但不是重定向/home 我想重定向/,因此它不会缓解重定向循环......也许如果我尝试改为命名路由重定向...
    • 这也不管用...叹息...也许我只需要一个不同的路由名称/url :(
    【解决方案2】:

    您认为为什么不处理这个问题?

    您可以简单地从您的 web.php 中删除一个路由声明。 然后继续进行条件渲染。

    @auth
     Show Home page
    @endauth
    
    @guest
    Show Login
    @endguest
    

    我猜中间件不会阻止请求到达路由, 而是阻止请求通过。

    您不能使用 middleenter code hereware 来决定要命中的路线,从而导致循环。 当您考虑自底向下处理时,laravel 已经注册了每个声明的路由。

    【讨论】:

    • 我宁愿不让视图处理这样的逻辑......但感谢您阐明这个选项。
    猜你喜欢
    • 2021-12-07
    • 2017-05-22
    • 2016-01-17
    • 2020-03-07
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 2023-03-22
    • 2021-09-09
    相关资源
    最近更新 更多