PHPackages                             impulsephp/auth - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. impulsephp/auth

ActiveLibrary

impulsephp/auth
===============

Authentication provider for ImpulsePHP: session-based login, logout, and current-user management with a pluggable user repository and password hashing, resolved via the container through AuthInterface.

01↑2900%PHP

Since Apr 5Pushed 1mo agoCompare

[ Source](https://github.com/ImpulsePHP/auth)[ Packagist](https://packagist.org/packages/impulsephp/auth)[ RSS](/packages/impulsephp-auth/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

ImpulsePHP Auth
===============

[](#impulsephp-auth)

`impulsephp/auth` fournit la brique d’authentification d’ImpulsePHP. Le package s’appuie sur les sessions PHP pour gérer la connexion, la déconnexion et la récupération de l’utilisateur courant, tout en laissant l’application libre de choisir son dépôt d’utilisateurs.

Ce que fait le package
----------------------

[](#ce-que-fait-le-package)

- authentifie un utilisateur à partir d’un identifiant et d’un mot de passe ;
- conserve l’état de connexion en session ;
- expose l’utilisateur courant via `AuthInterface` ;
- délègue la recherche des utilisateurs à `UserRepositoryInterface` ;
- utilise `PasswordHasher` pour vérifier les mots de passe.

Prérequis
---------

[](#prérequis)

- PHP 8.2 ou supérieur.

Installation
------------

[](#installation)

```
composer require impulsephp/auth
```

Le provider est déclaré via `extra.impulse-provider`. Si votre application ne gère pas l’auto-découverte, ajoutez `Impulse\Auth\AuthProvider` à votre liste de providers.

Intégration dans l’application
------------------------------

[](#intégration-dans-lapplication)

Le package attend qu’une implémentation de `Impulse\Auth\Contracts\UserRepositoryInterface` soit disponible dans l’application. C’est cette implémentation qui relie l’authentification à votre base de données, votre ORM ou tout autre système de stockage.

```
use Impulse\Auth\Contracts\UserRepositoryInterface;
use Impulse\Auth\Domain\User;

final class UserRepository implements UserRepositoryInterface
{
    public function findByIdentifier(string $identifier): ?User
    {
        // Retourner l'utilisateur trouvé par email ou nom d'utilisateur.
    }

    public function findById(int|string $id): ?User
    {
        // Retourner l'utilisateur trouvé par identifiant technique.
    }

    public function save(User $user): void
    {
        // Persister l'utilisateur si votre workflow le demande.
    }
}
```

Exemple d’usage complet
-----------------------

[](#exemple-dusage-complet)

L’exemple ci-dessous montre un scénario classique de formulaire de connexion puis d’accès à un espace protégé.

```
use Impulse\Auth\Contracts\AuthInterface;

$auth = $container->get(AuthInterface::class);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $identifier = (string) ($_POST['email'] ?? '');
    $password = (string) ($_POST['password'] ?? '');

    if ($auth->login($identifier, $password)) {
        header('Location: /account', true, 302);
        exit;
    }

    http_response_code(401);
    echo 'Identifiants invalides.';
}

if ($auth->check()) {
    $user = $auth->user();
    echo 'Bonjour ' . $user?->email;
}
```

### Déconnexion

[](#déconnexion)

```
use Impulse\Auth\Contracts\AuthInterface;

$auth = $container->get(AuthInterface::class);
$auth->logout();

header('Location: /login', true, 302);
exit;
```

### Protéger une page

[](#protéger-une-page)

```
use Impulse\Auth\Contracts\AuthInterface;

$auth = $container->get(AuthInterface::class);

if (!$auth->check()) {
    header('Location: /login', true, 302);
    exit;
}

$user = $auth->user();
```

API principale
--------------

[](#api-principale)

- `login(string $identifier, string $password): bool`
- `logout(): void`
- `check(): bool`
- `id(): int|string|null`
- `user(): ?Impulse\Auth\Domain\User`

Bonnes pratiques de sécurité
----------------------------

[](#bonnes-pratiques-de-sécurité)

Le `SessionStore` configure des cookies `HttpOnly` et régénère l’identifiant de session lors de la connexion et de la déconnexion. En production, il est recommandé de :

- servir l’application exclusivement en HTTPS ;
- conserver un cookie de session `secure` ;
- protéger les formulaires avec un mécanisme CSRF ;
- limiter les tentatives de connexion ;
- éviter de révéler précisément la cause d’un échec d’authentification.

Aller plus loin
---------------

[](#aller-plus-loin)

`impulsephp/auth` s’intègre naturellement avec :

- `impulsephp/db` pour récupérer les utilisateurs ;
- `impulsephp/validator` pour valider les formulaires de connexion ;
- `impulsephp/translation` pour localiser les messages côté interface.

### Intégration avec Cycle ORM (exemple)

[](#intégration-avec-cycle-orm-exemple)

Voici un exemple minimal d'implémentation d'un `UserRepository` utilisant Cycle ORM. Placez la classe dans votre application (par ex. `src/Repository/UserRepository.php`) et assurez-vous que Cycle ORM est correctement configuré dans votre container.

```
