Laravel 5.5 изменить неаутентифицированный URL-адрес перенаправления входа

В Laravel < 5.5 я могу изменить это app/Exceptions/Handler файлов app/Exceptions/Handler чтобы изменить URL-адрес перенаправления переназначенного пользователя:

 protected function unauthenticated($request, AuthenticationException $exception) { if ($request->expectsJson()) { return response()->json(['error' => 'Unauthenticated.'], 401); } return redirect()->guest(route('login')); } 

Но в Laravel 5.5 это было перемещено в это место vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php так как я могу изменить его сейчас? Я не хочу менять материал в каталоге поставщика, чтобы он был переопределен обновлениями композитора.

 protected function unauthenticated($request, AuthenticationException $exception) { return $request->expectsJson() ? response()->json(['message' => 'Unauthenticated.'], 401) : redirect()->guest(route('login')); } 

Но в Laravel 5.5 это было перемещено в это место vendor / laravel / framework / src / Illuminate / Foundation / Exceptions / Handler.php, так как я могу изменить его сейчас? Я не хочу менять материал в каталоге поставщика, чтобы он был переопределен обновлениями композитора.

Это просто случай, когда функция по умолчанию не существует.

Вы можете просто переопределить его, как это было в 5.4. Просто включите

 use Exception; use Request; use Illuminate\Auth\AuthenticationException; use Response; 

в файле обработчика.

Например, мое app/Exceptions/Handler.php выглядит примерно так:

 <?php namespace App\Exceptions; use Exception; use Request; use Illuminate\Auth\AuthenticationException; use Response; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; class Handler extends ExceptionHandler { (...) // The dfault file content /** * Convert an authentication exception into a response. * * @param \Illuminate\Http\Request $request * @param \Illuminate\Auth\AuthenticationException $exception * @return \Illuminate\Http\Response */ protected function unauthenticated($request, AuthenticationException $exception) { return $request->expectsJson() ? response()->json(['message' => 'Unauthenticated.'], 401) : redirect()->guest(route('authentication.index')); } } 

Вот как я это решил. В функции render я поймал класс исключения. И в случае, если это класс исключительной проверки подлинности, я написал свой код для перенаправления (код, который я бы написал в не прошедшей проверку в предыдущей версии функции).

 public function render($request, Exception $exception) { $class = get_class($exception); switch($class) { case 'Illuminate\Auth\AuthenticationException': $guard = array_get($exception->guards(), 0); switch ($guard) { case 'admin': $login = 'admin.login'; break; default: $login = 'login'; break; } return redirect()->route($login); } return parent::render($request, $exception); } 

Но в Laravel 5.5 это было перемещено в это место vendor / laravel / framework / src / Illuminate / Foundation / Exceptions / Handler.php, так как я могу изменить его сейчас? Я не хочу менять материал в каталоге поставщика, чтобы он был переопределен обновлениями композитора.

Нам нужно просто включить использование Illuminate \ Auth \ AuthenticationException;

а затем он работает как в laravel 5.4

1.Go к vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php файл.

2.Поиск имени метода не проверено.

3. И измените URL-адрес перенаправления из redirect()->guest(route('login')) для redirect()->guest(route('api/login')) //whatever you want .

Вы можете вернуть ответ как JSON, если это API-сервисы.