Задать вопрос
@Danbka

Как сделать форму авторизации на всех страницах?

Привет.

Начинаю изучать Laravel. Задача вроде тривиальная, но как сделать - ответа не нахожу.

Итак, после
php artisan make:auth
в /routes/web.php прописал следующие маршруты:
Route::get('/login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('/login', 'Auth\LoginController@login');


На странице /login форма авторизации прекрасно работает: при вводе корректных данных пользователь авторизуется и попадает на главную страницу. При вводе некорректных данных - выводятся ошибки.

Пытаюсь сделать форму авторизации на всех страницах. Для этого в основной шаблон добавил код:
{!! Form::open(['url' => '/login', 'class'=> 'form-inline my-2 my-lg-0']) !!}
    {!! Form::email('email', '', ['class' => 'form-control mr-sm-2', 'placeholder' => 'E-mail']) !!}
    {!! Form::password('password', ['class' => 'form-control mr-sm-2', 'placeholder' => 'Пароль']) !!}
    {!! Form::submit('Войти', ['class' => 'btn']) !!}
{!! Form::close() !!}


При вводе верного логина/пароля - пользователь авторизуется, все ок.

Но если ввести неверные данные, то со страницы /login происходит 302-ой редирект на главную.

Подскажите, пожалуйста, что я сделал не так? Как сделать правильно?
  • Вопрос задан
  • 619 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Novikofff
PHP Developer
Тебе нужно просто сделать нормальный редирект в LoginController@login
return redirect()->intended('/default');
Этот код вернет пользователя на ту страницу, к которой они пытались получить доступ до авторизации или на дефолтную
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Danbka Автор вопроса
Кажется, я сам нашел ответ на свой вопрос:

A 302 status code is a pretty standard Redirect response code in Laravel. If auth was unsuccessful, the app would redirect back with a 302; or if auth was successful, it might redirect to the intended URL with a 302 code.


Но как сделать по-другому:?

Ведь очевидно, что форма авторизации на каждой странице - где-то в углу, там физически нет места для вывода ошибок. Поэтому в случае неудачи - я хочу остаться на /login с выводом ошибок.
Ответ написан
Комментировать
Необходимо в методе Auth\LoginController@login самостоятельно проводить валидацию и в случае ошибки делать редирект на страницу логина, что-то типа такого:
$validator = Validator::make($request->all(), [
            'email' => 'required|max:255',
            'password' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect('login')
                        ->withErrors($validator)
                        ->withInput();
        }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы