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

Класс Authenticatable

Интерфейс Authenticatable определяет контракт, которому должны соответствовать модели пользователей для работы с системой аутентификации Laravel. Он содержит основные методы для получения идентификатора, пароля, имени пользователя и проверки запомненного состояния. Обычно этот интерфейс уже реализован в стандартной модели User, которая использует трейт Authenticatable.

Интерфейс требует реализации следующих методов: getAuthIdentifier возвращает уникальный идентификатор пользователя, getAuthPassword возвращает хешированный пароль, getRememberToken и setRememberToken управляют токеном запоминания, а getRememberTokenName возвращает имя поля для этого токена. Также есть метод getAuthIdentifierName, который возвращает имя поля с идентификатором.

Стандартная реализация

В Laravel модель User по умолчанию реализует интерфейс Authenticatable через трейт. Рассмотрим пример стандартной модели пользователя:

<?php namespace AppModels; use IlluminateFoundationAuthUser as Authenticatable; use IlluminateNotificationsNotifiable; class User extends Authenticatable { use Notifiable; protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; } ?>

В этом примере модель расширяет базовый класс Authenticatable, который уже предоставляет реализацию всех необходимых методов интерфейса.

Использование методов интерфейса

Получим аутентифицированного пользователя и вызовем основные методы интерфейса:

<?php namespace AppHttpControllers; use IlluminateSupportFacadesAuth; class UserController extends Controller { public function show() { $user = Auth::user(); if ($user) { $id = $user->getAuthIdentifier(); $name = $user->getAuthIdentifierName(); $password = $user->getAuthPassword(); $rememberToken = $user->getRememberToken(); echo "ID: " . $id; echo "Name field: " . $name; echo "Remember token: " . $rememberToken; } } } ?>

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

"ID: 1" "Name field: id" "Remember token: xV3f9kL2pQ5sT8mN"

Создание своей модели с интерфейсом

Если необходимо создать свою модель, реализующую интерфейс Authenticatable, можно использовать трейт и переопределить необходимые методы:

<?php namespace AppModels; use IlluminateAuthAuthenticatable; use IlluminateContractsAuthAuthenticatable as AuthenticatableContract; use IlluminateDatabaseEloquentModel; class Admin extends Model implements AuthenticatableContract { use Authenticatable; protected $table = 'admins'; protected $fillable = [ 'username', 'password_hash', ]; public function getAuthPassword() { return $this->password_hash; } } ?>

В этом примере мы переопределяем метод getAuthPassword, чтобы указать другое имя поля для пароля. Остальные методы наследуются из трейта Authenticatable.

Использование с провайдером

После создания своей модели необходимо настроить провайдер в конфигурации auth.php:

<?php 'providers' => [ 'admins' => [ 'driver' => 'eloquent', 'model' => AppModelsAdmin::class, ], ], ?>

Теперь можно использовать аутентификацию для модели Admin с помощью фасада Auth:

<?php namespace AppHttpControllers; use IlluminateSupportFacadesAuth; class AdminController extends Controller { public function dashboard() { $admin = Auth::guard('admins')->user(); if ($admin) { $id = $admin->getAuthIdentifier(); $username = $admin->username; echo "Admin ID: " . $id; echo "Username: " . $username; } else { echo "Not authenticated"; } } } ?>

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

"Admin ID: 5" "Username: john_doe"

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

  • класс User,
    который реализует интерфейс Authenticatable
  • фасад Auth,
    который предоставляет методы для аутентификации
  • метод user,
    который возвращает аутентифицированного пользователя
  • метод check,
    который проверяет, аутентифицирован ли пользователь
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить