> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wethehivers.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Authentification

> Comment s'authentifier auprès de l'API THE HIVE avec JWT

# Authentification

L'API THE HIVE utilise le protocole **JWT (JSON Web Tokens)**. Après connexion, chaque requête vers une route protégée doit inclure un access token dans l'en-tête `Authorization`.

## Tokens

| Token             | Durée de vie | Usage                                                                       |
| ----------------- | ------------ | --------------------------------------------------------------------------- |
| **Access Token**  | 15 minutes   | À envoyer dans le header `Authorization: Bearer <token>` sur chaque requête |
| **Refresh Token** | 7 jours      | Permet d'obtenir un nouvel access token sans se reconnecter                 |

Les tokens sont stockés en base et peuvent être révoqués (déconnexion). Une blacklist Redis partagée entre les VPS garantit qu'un token révoqué est rejeté immédiatement.

## Flux de connexion

```mermaid theme={null}
sequenceDiagram
    participant Client
    participant API
    participant Redis

    Client->>API: POST /auth/login (email, password)
    API->>API: Vérifier identifiants + compte actif
    API-->>Client: accessToken + refreshToken
    Client->>API: GET /protected (Authorization: Bearer <accessToken>)
    API->>Redis: Vérifier que le token n'est pas blacklisté
    API-->>Client: 200 OK
    Client->>API: POST /auth/refresh (refreshToken)
    API-->>Client: nouveau accessToken
```

## Exemple — Connexion

```bash theme={null}
curl -X POST https://api.wethehivers.com/v1/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "candidat@example.com",
    "password": "motdepasse"
  }'
```

Réponse :

```json theme={null}
{
  "accessToken": "eyJhbGciOiJIUzUxMiJ9...",
  "refreshToken": "eyJhbGciOiJIUzUxMiJ9...",
  "tokenType": "Bearer",
  "expiresIn": 900
}
```

## Exemple — Requête authentifiée

```bash theme={null}
curl https://api.wethehivers.com/v1/api/candidats/me \
  -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9..."
```

## Rôles

| Rôle          | Description                                                                                       |
| ------------- | ------------------------------------------------------------------------------------------------- |
| `CANDIDAT`    | Utilisateur qui postule à des offres. Accès : son profil, les offres publiques, ses candidatures. |
| `RECRUTEUR`   | Publie des offres pour le compte d'une entreprise. Doit être validé par un admin.                 |
| `ADMIN`       | Modère candidats, recruteurs, entreprises, offres, contenu blog.                                  |
| `SUPER_ADMIN` | Accès complet, y compris logs d'audit et configuration plateforme.                                |

<Warning>
  La déconnexion (`POST /auth/logout`) blackliste l'access token en cours. Pensez à supprimer aussi les tokens côté client (localStorage, cookies).
</Warning>
