Как изменить 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)


arrow_upward
43
arrow_downward

Я хотел сделать то же самое в 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


arrow_upward
11
arrow_downward

Это решение 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

arrow_upward
5
arrow_downward

В 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

arrow_upward
4
arrow_downward

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

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

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

person ultimate    schedule 24.02.2015


arrow_upward
1
arrow_downward

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

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

protected $loginPath = 'xxx';

protected $redirectPath = 'xxx';

protected $redirectAfterLogout = 'xxx';

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

person Nikunj K.    schedule 27.04.2016

arrow_upward
0
arrow_downward

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

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

<?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

arrow_upward
0
arrow_downward

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

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

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

person asanchez    schedule 23.04.2017

arrow_upward
0
arrow_downward

Для 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