Что означает этот код в RedirectIfAuthenticated.php?

Я видел, как кто-то добавил этот конкретный код в RedirectIfAuthenticated.php, и я не понимаю, как это на самом деле работает?

public function handle($request, Closure $next, $guard = null)
 {
     if (Auth::guard($guard)->check()) {
        return redirect('/home');
     }
     else {
        return redirect()->action('AdminController@login')->with('flash_message_error','Please login to access ');
     }

   return $next($request);
 }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
322
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

RedirectIfAuthenticated.php - это промежуточное ПО, которое запускается до тех пор, пока вы не увидите результат запроса. Он только проверяет, вошли ли вы в систему или нет, и перенаправляет на соответствующие маршруты.

Я могу это понять, но как он перезаписывает страницы, отображаемые по умолчанию командой auth, пользовательскими страницами и как это происходит?

Don'tDownvoteMe 19.10.2018 13:07

Это не перезапись страниц, а перенаправление на другую функцию контроллера, которая имеет собственную логику или представление.

alexandru.gaidei 19.10.2018 13:11
Ответ принят как подходящий

В псевдокоде:

if authenticated:
    redirect to /home
else (not authenticated):
    redirect to the url that corresponds to AdminController@login, flashing an error message to the session

Часть else не существует в промежуточном программном обеспечении Laravel, похоже, вы ее добавили. Этого не должно быть, потому что это приведет к тому, что это промежуточное ПО всегда кого-то куда-то перенаправит.

Это промежуточное ПО предполагается использовать только для «гостевых» маршрутов. Поэтому, если вы аутентифицированы, он перенаправляет на «дом», в противном случае запускает следующее промежуточное ПО.

Вы имеете в виду, что если пользователь аутентифицирован и учетные данные определены правильно, он должен быть перенаправлен на home, иначе, если учетные данные не совпадают, он будет перенаправлен на AdminController@login?

Don'tDownvoteMe 19.10.2018 13:16

Это ничего не делает с учетными данными. Это просто проверяет, аутентифицирован ли уже пользователь. Как я уже сказал, часть else, вероятно, не должна существовать, потому что зачем иметь промежуточное ПО, которое перенаправляет 100% времени?

Devon 19.10.2018 13:18

Большое спасибо! Я новичок в Laravel, и мне трудно понять концепцию аутентификации. Я могу показаться глупым, но я все же хочу прояснить это, когда вы пишете if (authenticated), я понимаю это, поскольку в моем случае это означает, что если адрес электронной почты пользователя и пароль совпадают, он перенаправляется на панель управления, маршрут панели управления попадает в промежуточное ПО Auth. Это промежуточное ПО должно фильтровать этот запрос, но где оно выполняет эту фильтрацию? И, как вы мне сказали, он не фильтруется, поэтому каждый раз запускается часть else.

Don'tDownvoteMe 19.10.2018 13:26

Я не понимаю, о чем вы здесь спрашиваете. Аутентификация, скорее всего, хранится в сеансе, где, поскольку учетные данные не проверяются каждый раз, когда вы загружаете страницу, они проверяются только тогда, когда вы отправляете свои учетные данные, а затем создается сеанс. Итак, Auth :: check () не проверяет учетные данные, а проверяет, был ли этот сеанс создан. Это промежуточное ПО НЕ МОЖЕТ существовать на маршруте, который фактически проверяет ваши учетные данные, поскольку оно будет перенаправлять до того, как попадет в этот код.

Devon 19.10.2018 13:32

Ой, моя беда, я знаю, что перенаправление произойдет до попадания в маршрут. Просто чтобы подтвердить мои выводы, код нигде не формирует сеанс, который обычно используется для аутентификации пользователей. Но мы просто используем это промежуточное программное обеспечение для перенаправления всех запросов, которые мы получаем, прежде чем попасть на маршрут, который попадает в эту конкретную группу маршрутов?

Don'tDownvoteMe 19.10.2018 13:39

Если у вас есть это промежуточное ПО в группе маршрутов, ни один из этих маршрутов не будет работать, поскольку вы перенаправляете 100% времени.

Devon 19.10.2018 13:41

Я согласен, но как тогда работает этот фрагмент кода, который я опубликовал выше? Не могли бы вы объяснить поток запросов приведенного выше кода. Извините, что отнял ваше время, но я не могу его довести до конца. Насколько я понимаю, в AdminController@login, когда учетные данные совпадают, мы перенаправляемся на панель управления. Прежде чем идти по маршруту, мы обращаемся к промежуточному программному обеспечению. Но, как вы говорите, функция приборной панели в AdminController никогда не должна попадать в цель, тогда как она работает?

Don'tDownvoteMe 19.10.2018 13:47

Я думаю, вы неправильно понимаете промежуточное ПО. Как вы думаете, почему это промежуточное ПО запускается на любом из этих маршрутов?

Devon 19.10.2018 13:49

В соответствии с моим пониманием и тем, что говорится в документации Laravel, промежуточное ПО запускается для аутентификации запроса пользователя. Но вы только что сказали мне, что мы проверяем, сформирована ли сессия, которая, очевидно, нигде не сформирована, поэтому используется только для перенаправления. Но тогда, если бы это было правдой, то как попадает в маршрут дашборда? Пожалуйста, помогите мне с путаницей.

Don'tDownvoteMe 19.10.2018 13:53

Я не думаю, что смогу помочь вам в этом вопросе, я думаю, вам может понадобиться профессиональный наставник или учитель, который объяснит это лично или визуально. ПО промежуточного слоя не запускается для аутентификации пользователя. Аутентификация происходит в методе входа в систему, если запрос является публикацией. Маршрут панели мониторинга не имеет этого промежуточного программного обеспечения, маршрут панели мониторинга использует промежуточное программное обеспечение auth, которое выполняет функции, противоположные промежуточному программному обеспечению по умолчанию «guest». Начните со свежего проекта laravel вместо того, чтобы использовать настраиваемое «гостевое» промежуточное ПО, которое у вас есть.

Devon 19.10.2018 13:55

Хорошо, спасибо за помощь, но, пожалуйста, объясните мне эту мелочь, что означает Route::group(['middleware'=>['auth']],function(){ Route::get('admin/dashboard', 'AdminController@dashboard'); Route::get('settings','AdminController@settings'); });? Я вижу промежуточное ПО перед маршрутом панели инструментов.

Don'tDownvoteMe 19.10.2018 13:59

Вы ссылаетесь на неправильное промежуточное ПО. 'auth' не использует RedirectIfAuthenticated, посмотрите app / Http / Kernel.php

Devon 19.10.2018 14:00

Другие вопросы по теме