Как изменить URL-адрес перенаправления по умолчанию для фильтра аутентификации Laravel 5?

По умолчанию, если я не вошел в систему и пытаюсь посетить это в браузере:

http://localhost:8000/home

Он перенаправляет меня на http://localhost:8000/auth/login

Как мне изменить, чтобы перенаправить меня на http://localhost:8000/login


person Vladimir    schedule 24.02.2015    source источник
comment
просто измените метод обработки промежуточного программного обеспечения аутентификации с помощью именованного маршрута.   -  person PriyankMotivaras    schedule 13.11.2020


Ответы (10)


Я хотел сделать то же самое в Laravel 5.5. Обработка аутентификации перемещена в Illuminate\Auth\Middleware\Authenticate, который выдает Illuminate\Auth\AuthenticationException.

Это исключение обрабатывается в Illuminate\Foundation\Exceptions\Hander.php, но вы не хотите изменять исходные файлы поставщика, поэтому вы можете перезаписать его своими собственными файлами проекта, добавив его в App\Exceptions\Handler.php.

Для этого добавьте в начало класса Handler в App\Exceptions\Handler.php следующее:

use Illuminate\Auth\AuthenticationException;

А затем добавьте следующий метод, при необходимости отредактировав:

/**
 * Convert an authentication exception into an unauthenticated response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Illuminate\Auth\AuthenticationException  $exception
 * @return \Illuminate\Http\Response
 */
protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }

    return redirect()->guest('login'); //<----- Change this
}

Просто измените return redirect()->guest('login'); на return redirect()->guest(route('auth.login')); или что-нибудь еще.

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

person Moritz Ewert    schedule 19.09.2016
comment
5 минут? ... чувак ... все будет хотя бы на 1 час, лол. - person Fahmi; 12.12.2016
comment
Не меняйте файлы ядра, это действительно плохая идея, и когда композитор запустит обновление, все ваши изменения будут перезаписаны. - person twigg; 10.01.2017
comment
Ужасный ответ. +1 - person Awais Usmani; 24.01.2017
comment
@twigg, это не файл ядра. Это обработчик исключений, расположенный в App \ Exceptions \ Handler. Ничего не будет перезаписано - person Moritz Ewert; 08.03.2017
comment
Какова цель return redirect()->guest('login');, а не return redirect('login');? - person Inigo; 09.10.2017
comment
@Inigo, гостевой метод, сохраняет текущий URL-адрес в качестве «предполагаемого» места назначения, пока он перенаправляет неаутентифицированных пользователей. после входа пользователь будет возвращен на предполагаемый URL - person Moritz Ewert; 09.10.2017
comment
Совет: если у вас несколько охранников аутентификации (возможно, «администратор»), и вы хотите перенаправить на другую страницу входа в систему, вы можете проверить, какие охранники были проверены (и потерпели неудачу) следующим образом: if (in_array('admin', $exception->guards())) { ... } - person Jeffrey; 15.11.2017
comment
Спасибо, избавили меня от необходимости разобраться в этом! - person dranieri; 26.03.2018


Это решение Laravel 5.4.

В app / Exceptions / Handler.php появился новый метод unauthenticated (), который обрабатывает неаутентифицированных пользователей и перенаправляет их на путь входа в систему.

Так что измени

return redirect()->guest('login');

to

return redirect()->guest('auth/login');
person Salil Kothadia    schedule 21.02.2017
comment
Привет, @salil, у меня ошибка. К сожалению, страница, которую вы ищете, не может быть найдена. NotFoundHttpException в строке 161 RouteCollection.php: при загрузке пользовательского URL-адреса для входа. Могу я узнать, как решить эту проблему? мне нужно создать новое представление только для пользовательского входа в систему? - person davidlee; 03.04.2017
comment
Боже на байке, это снова изменилось в Laravel 5.5. Метод unauthenticated() теперь удален из App / Exceptions / Handler.php. Это похоже на то, что с каждой версией они хотят еще больше запутать внутреннюю работу системы аутентификации. Очень неприятно для тех из нас, кто хочет его изменить или даже просто понять. - person Inigo; 16.10.2017
comment
Хорошо, решение Laravel 5.5 здесь: stackoverflow.com/questions/45340855/ - person Inigo; 16.10.2017

В Laravel 5.6 перейдите в папку app / Exceptions и откройте Handler.php, добавьте новый метод, который переопределяет неаутентифицированный метод следующим образом:

protected function unauthenticated($request, AuthenticationException $exception)
{
    if($request->ajax())
    {
        return response([
            "message" => "Unauthenticated.",
            "data" => [],
        ],401);
    }

    return redirect()->to('/');
}

Этот метод запускается, когда вы получаете доступ к защищенному маршруту с помощью встроенного промежуточного программного обеспечения «auth». Теперь у вас будет полный контроль, куда перенаправить или какой ответ будет отправлен.

person Darryldecode    schedule 11.03.2018

Проверки аутентификации выполняются с использованием промежуточного программного обеспечения в Laravel 5.

А промежуточное ПО для auth - App\Http\Middleware\Authenticate.

Таким образом, вы можете изменить его в handle методе промежуточного программного обеспечения.

person ultimate    schedule 24.02.2015


не могли бы вы вывести php artisan route:list пожалуйста

Вы правы, вы можете установить следующие атрибуты:

protected $loginPath = 'xxx';

protected $redirectPath = 'xxx';

protected $redirectAfterLogout = 'xxx';

Установите этот атрибут на себя AuthController.php

person Nikunj K.    schedule 27.04.2016

Поскольку ваш другой вопрос был отмечен как дубликат .. Постараюсь ответить здесь ..

Сначала вам нужно изменить свой маршрут, например

<?php
Route::get(config('constants.cms_path') . '/login', [
    'as' => 'login',
    'uses' => 'Auth\AuthController@getLogin'
]);

В вашем клинке ... убедитесь, что вы используете именованный маршрут в ссылке URL-адреса входа, например

{{ route('login') }}

В Middleware / Authenticate.php измените гостя перенаправления на

return redirect()->guest(config('constants.cms_path') . '/login');
person JLPuro    schedule 09.09.2015

Чтобы изменить перенаправление после входа в систему, вам нужно только перейти в app / Http / Controllers / Auth / LoginController.php и добавить это внутри класса LoginController:

protected $redirectTo = '/redirect-url-here';

То же самое для перенаправления после регистрации нового пользователя, но в этом случае на AuthController.php

person asanchez    schedule 23.04.2017

Для Laravel 5.4 вы можете установить protected $ redirectTo = '/'; в ФАЙЛЕ LoginController.php. Или в файле RegistersUsers.php вы можете

protected function registered(Request $request, $user)
{
    return redirect('tosomeRoute'); 
    //Note: This code will run when
    //The user has been registered
}
person Daud khan    schedule 14.05.2017