Подтвердить что ты не робот

Laravel Что такое охранник?

Я просматривал встроенные auth-контроллеры, и я заметил, что они используют что-то под названием "Гвардия". До сих пор, когда я делал свои собственные логины/регистрационные формы, я никогда не касался их и обычно делал бы такие вещи, как:

Auth::attempt()

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

4b9b3361

Ответ 1

Они определяют, как система должна хранить и извлекать информацию о ваших пользователях.

Вы можете найти конфигурацию в вашем файле config/auth.php. Сетевая защита - это традиционное хранилище файлов cookie, поэтому она защищает Laravel классическим способом хранить и извлекать информацию о сеансе. Защита API, с другой стороны, использует токены. Поэтому вы можете использовать API-защиту, если хотите аутентифицировать пользователей и запросы с использованием токена API в заголовке (однонаправленном канале) или параметре запроса.

Вы также можете создать свою собственную охрану, если хотите, и там также есть хорошее вступительное сообщение в блоге на тему Мэтта Штауффера.

Ответ 2

Защита - это способ предоставления логики, которая используется для идентификации аутентифицированных пользователей. Laravel предоставляет различных охранников, таких как сессии и жетоны. Сеансовая защита поддерживает состояние пользователя в каждом запросе с помощью файлов cookie, а с другой стороны, защита токена аутентифицирует пользователя, проверяя действительный токен в каждом запросе.

Ответ 3

Поскольку у меня был тот же вопрос, а другие ответы не дали мне информацию, которую я искал (они прекрасно объясняют, что делает охранник, но не объясняют, почему вам следует когда-либо беспокоиться о вызове его методов), я предоставлю другой ответ.

Я также не был уверен в разнице между методами, предоставляемыми помощником auth(), и методами, предоставляемыми самим охранником auth()->guard(), поскольку они, казалось, делали то же самое.

Быстрый dd(auth()) показывает, что он возвращает экземпляр AuthManager. Таким образом, мы можем найти этот класс в исходном коде: в нижней части AuthManager.php есть магический метод __call() magic method, который перенаправляет все неопределенные вызовы в свой собственный guard() метод.

public function __call($method, $parameters)
{
    return $this->guard()->{$method}(...$parameters);
}

Это ясно показывает нам, что методы auth() и auth()->guard(), похоже, не только делают то же самое, но и абсолютно одинаковы. Таким образом, до тех пор, пока должна использоваться защита по умолчанию, дополнительный ->guard() может быть опущен с душевным спокойствием.