Провайдеры пользователей User Providers
Провайдеры пользователей User Providers определяют, откуда система получает данные о пользователях. Каждый провайдер реализует интерфейс Imhotep\Contracts\Auth\UserProvider.
Array User Provider
Использует массив данных для аутентификации. Идеально для тестирования или демонстрационных приложений.
// config/auth.php
'providers' => [
'admins' => [
'driver' => 'array',
'users' => [
'admin@example.com' => [
'id' => 1,
'email' => 'admin@example.com',
'password' => 'admin123',
'name' => 'Administrator',
],
'moderator@example.com' => [
'id' => 2,
'email' => 'moderator@example.com',
'password' => 'mod123',
'name' => 'Moderator',
],
],
],
],
PHP
Database User Provider
Основной провайдер для получения пользователей из базы данных.
Конфигурация
// config/auth.php
'providers' => [
'users' => [
'driver' => 'database',
'connections' => null, // Соединения с БД
'table' => 'users', // Таблица в БД с пользователями
'user' => App\Models\User::class, // Опционально: класс модели пользователя
],
],
PHP
Certificate User Provider
Провайдер для получения информации о пользователе из SSL-сертификата.
// config/auth.php
'providers' => [
'cert_users' => [
'driver' => 'certificate',
],
],
PHP
Создание собственного провайдера
namespace App\Auth\UserProviders;
use Imhotep\Contracts\Auth\Authenticatable;
use Imhotep\Contracts\Auth\UserProvider;
class CustomUserProvider implements UserProvider
{
public function __construct(
protected array $config
) {}
public function getById(mixed $id): ?Authenticatable
{
// Получение пользователя по ID
return $this->makeUser(['id' => $id]);
}
public function getByToken(mixed $id, string $token): ?Authenticatable
{
// Получение по токену
$user = $this->getById($id);
if ($user && $user->getRememberToken() === $token) {
return $user;
}
return null;
}
public function getByCredentials(array $credentials): ?Authenticatable
{
// Поиск по учетным данным
$email = $credentials['email'] ?? null;
$password = $credentials['password'] ?? null;
if (!$email || !$password) {
return null;
}
// Ваша логика поиска
return $this->makeUser([
'id' => 1,
'email' => $email,
'password' => hash('sha256', $password),
'name' => 'User',
]);
}
public function updateRememberToken(Authenticatable $user, string $token): void
{
// Обновление токена
$user->setRememberToken($token);
// Сохранение в БД
}
public function validateCredentials(Authenticatable $user, array $credentials): bool
{
// Проверка пароля
$hash = hash('sha256', $credentials['password']);
return hash_equals($user->getAuthPassword(), $hash);
}
protected function makeUser(array $attributes): Authenticatable
{
return new \Imhotep\Auth\GenericUser($attributes);
}
}
PHP
Теперь достаточно зарегистрировать провайдер в сервис провайдере:
// app/Providers/AppServiceProvider.php
use Imhotep\Facades\Auth;
use App\Auth\UserProviders\CustomUserProvider;
class AuthServiceProvider extends ServiceProvider
{
public function boot(): void
{
Auth::extendProvider('custom', function ($app, $config) {
return new CustomUserProvider($config);
});
}
}
PHP
В конфигурации используйте следующим образом:
// config/auth.php
'providers' => [
'custom' => [
'driver' => 'custom',
// Дополнительные параметры
],
],
PHP
GenericUser
GenericUser - это простой класс, реализующий Authenticatable. Используется, когда не указан пользовательский класс модели пользователя.
use Imhotep\Auth\GenericUser;
$user = new GenericUser([
'id' => 1,
'email' => 'john@example.com',
'password' => 'hashed_password',
'name' => 'John Doe',
]);
// Доступ к атрибутам
echo $user->name; // John Doe
echo $user->email; // john@example.com
// Методы аутентификации
$id = $user->getAuthId(); // 1
$password = $user->getAuthPassword(); // hashed_password
PHP