Laravel Що таке охоронець?


78

Я переглядав вбудовані контролери авторизації і помітив, що вони використовують щось, що називається "Guards". До цього часу, коли я створював власні форми для входу / реєстрації, я ніколи їх не торкався, і зазвичай просто робив такі речі:

Auth::attempt()

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

Відповіді:


92

Вони визначають, як система повинна зберігати та отримувати інформацію про ваших користувачів.

Ви можете знайти конфігурацію у своєму config/auth.phpфайлі. Веб-захист - це традиційний магазин файлів cookie, завдяки чому веб-охоронець доручає Laravel зберігати та отримувати інформацію про сеанси класичним способом. Натомість захисник API використовує маркери. Отже, ви б використовували захист API, якщо хочете автентифікувати користувачів та запити, використовуючи маркер API у заголовку (носії) або параметрі запиту.

Ви також можете створити свою власну охорону, якщо хочете, а також є цей хороший вступний допис у блозі на тему від Метта Штаффера.


3
Охоронець теж може бути захистом для чого завгодно. Як запобігти Неповнолітній покупку лінієчку від події: $this->preventMinorsGuard();. Можна використовувати так?
brnmonteiro

9

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


5

Оскільки у мене було те саме запитання, а інші відповіді не надали мені тієї інформації, яку я шукав (вони чудово пояснюють, що робить охоронець, але не те, чому вам слід коли-небудь турбуватися про виклик її методів), я надам іншу відповідь.

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

Швидкий dd(auth())виявляє, що він повертає екземпляр AuthManager. Тож ми можемо шукати цей клас у вихідному коді : унизу AuthManager.php є __call() магічний метод, який пересилає всі невизначені виклики до власного guard()методу.

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

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


1

Роль охорони полягає в автентифікації маршрутів

  1. Веб-охорона буде автентифікувати веб-маршрути
  2. Програвач Api перевірить автентичність маршрутів API.
  3. Для інших типів користувачів, наприклад, Admin guard буде автентифікувати адміністративні маршрути тощо.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.