Laravel Routing Order Несколько «домашних страниц» на основе аутентификации - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть файл маршрутизации 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 должен прочитать файл маршрутов сверху вниз, похоже, это не применимо в моем случае (возможно, из-за ::group()), или я делаю что-то не так.

Как я могу выполнить домашнюю страницу, которая переходит в форму входа в систему, а такжеперенаправление назад на тот же URL (/) для аутентифицированных пользователей для другого аутентифицированного представления (и без цикла перенаправления).

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Почему бы не обработать это на ваш взгляд?

Вы можете просто удалить одно из объявлений маршрута из вашего web.php.Затем перейдите к условному рендерингу.

@auth
 Show Home page
@endauth

@guest
Show Login
@endguest

Я полагаю, что промежуточное ПО не предотвращает попадание запросов в маршруты, скорее предотвращает прохождение запроса.

Нельзя использовать среднее enter code here Посуда, чтобы решить с маршрутом, чтобы попасть, тем самым петля.Когда вы думаете с точки зрения обработки снизу-вниз, laravel уже зарегистрировал все объявленные маршруты.

0 голосов
/ 25 сентября 2019

Я бы справился с этим внутри гостевого промежуточного программного обеспечения, которое проверяет аутентифицированного пользователя.В этом случае вам сначала потребуется проверка подлинности:

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 только к гостевым маршрутам, в противном случае вы рискуете получить петли перенаправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...