Я видел, как кто-то добавил этот конкретный код в 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);
}






RedirectIfAuthenticated.php - это промежуточное ПО, которое запускается до тех пор, пока вы не увидите результат запроса. Он только проверяет, вошли ли вы в систему или нет, и перенаправляет на соответствующие маршруты.
Это не перезапись страниц, а перенаправление на другую функцию контроллера, которая имеет собственную логику или представление.
В псевдокоде:
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?
Это ничего не делает с учетными данными. Это просто проверяет, аутентифицирован ли уже пользователь. Как я уже сказал, часть else, вероятно, не должна существовать, потому что зачем иметь промежуточное ПО, которое перенаправляет 100% времени?
Большое спасибо! Я новичок в Laravel, и мне трудно понять концепцию аутентификации. Я могу показаться глупым, но я все же хочу прояснить это, когда вы пишете if (authenticated), я понимаю это, поскольку в моем случае это означает, что если адрес электронной почты пользователя и пароль совпадают, он перенаправляется на панель управления, маршрут панели управления попадает в промежуточное ПО Auth. Это промежуточное ПО должно фильтровать этот запрос, но где оно выполняет эту фильтрацию? И, как вы мне сказали, он не фильтруется, поэтому каждый раз запускается часть else.
Я не понимаю, о чем вы здесь спрашиваете. Аутентификация, скорее всего, хранится в сеансе, где, поскольку учетные данные не проверяются каждый раз, когда вы загружаете страницу, они проверяются только тогда, когда вы отправляете свои учетные данные, а затем создается сеанс. Итак, Auth :: check () не проверяет учетные данные, а проверяет, был ли этот сеанс создан. Это промежуточное ПО НЕ МОЖЕТ существовать на маршруте, который фактически проверяет ваши учетные данные, поскольку оно будет перенаправлять до того, как попадет в этот код.
Ой, моя беда, я знаю, что перенаправление произойдет до попадания в маршрут. Просто чтобы подтвердить мои выводы, код нигде не формирует сеанс, который обычно используется для аутентификации пользователей. Но мы просто используем это промежуточное программное обеспечение для перенаправления всех запросов, которые мы получаем, прежде чем попасть на маршрут, который попадает в эту конкретную группу маршрутов?
Если у вас есть это промежуточное ПО в группе маршрутов, ни один из этих маршрутов не будет работать, поскольку вы перенаправляете 100% времени.
Я согласен, но как тогда работает этот фрагмент кода, который я опубликовал выше? Не могли бы вы объяснить поток запросов приведенного выше кода. Извините, что отнял ваше время, но я не могу его довести до конца. Насколько я понимаю, в AdminController@login, когда учетные данные совпадают, мы перенаправляемся на панель управления. Прежде чем идти по маршруту, мы обращаемся к промежуточному программному обеспечению. Но, как вы говорите, функция приборной панели в AdminController никогда не должна попадать в цель, тогда как она работает?
Я думаю, вы неправильно понимаете промежуточное ПО. Как вы думаете, почему это промежуточное ПО запускается на любом из этих маршрутов?
В соответствии с моим пониманием и тем, что говорится в документации Laravel, промежуточное ПО запускается для аутентификации запроса пользователя. Но вы только что сказали мне, что мы проверяем, сформирована ли сессия, которая, очевидно, нигде не сформирована, поэтому используется только для перенаправления. Но тогда, если бы это было правдой, то как попадает в маршрут дашборда? Пожалуйста, помогите мне с путаницей.
Я не думаю, что смогу помочь вам в этом вопросе, я думаю, вам может понадобиться профессиональный наставник или учитель, который объяснит это лично или визуально. ПО промежуточного слоя не запускается для аутентификации пользователя. Аутентификация происходит в методе входа в систему, если запрос является публикацией. Маршрут панели мониторинга не имеет этого промежуточного программного обеспечения, маршрут панели мониторинга использует промежуточное программное обеспечение auth, которое выполняет функции, противоположные промежуточному программному обеспечению по умолчанию «guest». Начните со свежего проекта laravel вместо того, чтобы использовать настраиваемое «гостевое» промежуточное ПО, которое у вас есть.
Хорошо, спасибо за помощь, но, пожалуйста, объясните мне эту мелочь, что означает Route::group(['middleware'=>['auth']],function(){ Route::get('admin/dashboard', 'AdminController@dashboard'); Route::get('settings','AdminController@settings'); });? Я вижу промежуточное ПО перед маршрутом панели инструментов.
Вы ссылаетесь на неправильное промежуточное ПО. 'auth' не использует RedirectIfAuthenticated, посмотрите app / Http / Kernel.php
Я могу это понять, но как он перезаписывает страницы, отображаемые по умолчанию командой auth, пользовательскими страницами и как это происходит?