РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
688 of 1392 menu

Исключение AuthenticationException

Исключение AuthenticationException в Laravel возникает в тех случаях, когда пользователь пытается получить доступ к маршруту или действию, требующему аутентификации, но при этом не авторизован. Это исключение автоматически выбрасывается системой при использовании посредника auth, а также может быть вызвано вручную в контроллере или другом месте приложения. Оно относится к пространству имён Illuminate\Auth\AuthenticationException.

Конструктор исключения

Конструктор AuthenticationException принимает несколько параметров, позволяющих настроить сообщение и поведение при возникновении ошибки:

<?php use Illuminate\Auth\AuthenticationException; // Создание исключения с кастомным сообщением $exception = new AuthenticationException('Custom error message'); // Создание исключения с указанием redirect URL $exception = new AuthenticationException( 'Please login first', [], // дополнительные данные '/login' // URL для редиректа ); // Создание исключения с указанием guard'ов $exception = new AuthenticationException( 'Unauthenticated', ['web', 'api'] // guards, которые были использованы ); ?>

Пример с посредником auth

Наиболее частый способ возникновения исключения - это использование посредника auth в маршрутах. Когда пользователь не аутентифицирован, посредник автоматически выбрасывает AuthenticationException. Рассмотрим настройку маршрута:

<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\DashboardController; Route::get('/dashboard', [DashboardController::class, 'index']) ->middleware('auth') ->name('dashboard'); ?>

Если неаутентифицированный пользователь попытается перейти по адресу /dashboard, будет выброшено исключение, которое Laravel обработает и перенаправит на страницу входа по умолчанию.

Обработка исключения в контроллере

Иногда возникает необходимость вручную проверить аутентификацию пользователя и выбросить исключение в контроллере. Это может быть полезно при нестандартной логике авторизации:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Auth\AuthenticationException; use Illuminate\Support\Facades\Auth; class SettingsController extends Controller { public function update(Request $request) { if (!Auth::check()) { throw new AuthenticationException( 'You must be logged in to update settings' ); } // Логика обновления настроек return redirect()->back()->with('success', 'Settings updated'); } } ?>

Результат выполнения кода при неаутентифицированном пользователе:

"Exception thrown: You must be logged in to update settings"

Обработка в исключениях API

При разработке API исключение AuthenticationException может быть перехвачено и преобразовано в JSON-ответ. Для этого необходимо настроить обработку в классе Handler. Пример обработки:

<?php namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Auth\AuthenticationException; use Throwable; class Handler extends ExceptionHandler { public function render($request, Throwable $exception) { if ($exception instanceof AuthenticationException) { return response()->json([ 'status' => 'error', 'message' => 'Authentication required', 'code' => 401 ], 401); } return parent::render($request, $exception); } } ?>

Результат выполнения запроса к API без токена:

{"status":"error","message":"Authentication required","code":401}

Пример с кастомным редиректом

При возникновении исключения можно перенаправить пользователя на произвольный URL, передав его в конструктор исключения:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Auth\AuthenticationException; class ProfileController extends Controller { public function show(Request $request) { if (!$request->user()) { throw new AuthenticationException( 'Please login to view profile', [], route('login.custom') ); } return view('profile.show'); } } ?>

Смотрите также

  • класс Handler,
    который используется для кастомизации обработки исключений
  • метод render,
    который рендерит исключение в HTTP-ответ
  • исключение AuthorizationException,
    которое возникает при недостатке прав доступа
  • метод report,
    который логирует информацию об исключении
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить