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

# Authentification

> Système d'authentification Remora Trading avec fonctionnalité "Se souvenir de moi"

# Spécifications d'Authentification - Remora Trading

{/* Ne pas modifier manuellement, ils sont mis à jour automatiquement après chaque commit */}

## 📊 Statut des Tests

### Tests Frontend (Checkly)

[![checkly-frontend no-tests](https://img.shields.io/badge/checkly--frontend-no--tests-lightgrey)](https://app.checklyhq.com/checks)

### Tests Backend (Vitest)

[![vitest-backend failing](https://img.shields.io/badge/vitest--backend-failing-red)](https://docs.poihunter.com/docs/reports/vitest/specs/authentication.json)

***

## 🎯 Vue d'ensemble

Ce document définit les spécifications pour le système d'authentification de Remora Trading, incluant la fonctionnalité "Se souvenir de moi" (Remember Me).

## 📝 TERMINOLOGIE

### **Session**

* **Session standard** : Session avec expiration de 7 jours (par défaut)
* **Session persistante** : Session avec expiration de 30 jours (quand "Se souvenir de moi" est coché)
* **expiresAt** : Date d'expiration de la session dans la base de données
* **expiresIn** : Durée de vie de la session en secondes (configuration Better Auth)

### **Remember Me**

* **Case à cocher** : Interface utilisateur permettant de choisir une session persistante
* **Session persistante** : Session avec durée de vie prolongée (30 jours au lieu de 7 jours)

## 🔐 Fonctionnalités d'Authentification

### Connexion avec Email et Mot de Passe

#### Scénario 1: Connexion sans "Se souvenir de moi"

* Étant donné un utilisateur avec email et mot de passe valides
* Et la case "Se souvenir de moi" n'est pas cochée
* Quand l'utilisateur se connecte
* Alors une session est créée avec expiration de 7 jours
* Et la session expire après 7 jours d'inactivité

#### Scénario 2: Connexion avec "Se souvenir de moi"

* Étant donné un utilisateur avec email et mot de passe valides
* Et la case "Se souvenir de moi" est cochée
* Quand l'utilisateur se connecte
* Alors une session est créée avec expiration de 30 jours
* Et la session expire après 30 jours d'inactivité
* Et la session est persistante même après fermeture du navigateur

#### Scénario 3: Connexion avec OAuth (Google/GitHub)

* Étant donné un utilisateur qui choisit de se connecter avec Google ou GitHub
* Quand l'utilisateur complète le flux OAuth
* Alors une session est créée avec expiration de 7 jours (par défaut)
* Et la case "Se souvenir de moi" n'est pas disponible pour OAuth

## 🔄 Gestion des Sessions

### Durées de Session

| Type de Session                  | Durée    | Expiration                                 |
| -------------------------------- | -------- | ------------------------------------------ |
| Standard (sans "Remember Me")    | 7 jours  | `expiresAt = now + 7 jours`                |
| Persistante (avec "Remember Me") | 30 jours | `expiresAt = now + 30 jours`               |
| OAuth (Google/GitHub)            | 7 jours  | `expiresIn = 7 jours` (config Better Auth) |

### Mise à Jour de Session

* La session est automatiquement rafraîchie selon `updateAge` (1 jour)
* Si "Se souvenir de moi" est coché, la session est prolongée à 30 jours lors du rafraîchissement
* Si "Se souvenir de moi" n'est pas coché, la session reste à 7 jours maximum

## 🛠️ Implémentation Technique

### Backend (Better Auth)

#### Configuration de Session

```typescript theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
session: {
  expiresIn: 60 * 60 * 24 * 7, // 7 jours par défaut
  updateAge: 60 * 60 * 24, // 1 jour
}
```

#### Hook après Connexion

* Après la création de la session par Better Auth
* Si le paramètre `remember` est `true`
* Alors mettre à jour `expiresAt` dans la base de données à `now + 30 jours`
* Sinon, laisser `expiresAt` à la valeur par défaut (7 jours)

### Frontend

#### Formulaire de Connexion

* Le formulaire contient une case à cocher "Se souvenir de moi"
* La valeur de la case est passée au composable `useAuth().signIn()`
* Le composable transmet le paramètre `remember` au backend

#### Composable useAuth

```typescript theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
signIn(email: string, password: string, remember?: boolean)
```

## 📊 Tests Requis

### Tests Unitaires Backend

* Test de création de session standard (7 jours)
* Test de création de session persistante (30 jours)
* Test de mise à jour de session avec "remember me"
* Test de validation du paramètre `remember`

### Tests Playwright UI

* Test de connexion sans "Se souvenir de moi"
* Test de connexion avec "Se souvenir de moi"
* Test de persistance de session après fermeture du navigateur
* Test de vérification de l'expiration de session

## 📚 Documentation Mintlify

### Section à Ajouter

* **Titre** : "Se souvenir de moi"
* **Description** : Explication de la fonctionnalité et de son impact sur la durée de session
* **Exemples** : Code d'utilisation frontend et backend
* **Durées** : Tableau des durées de session selon le type

## 🔒 Sécurité

### Considérations

* Les sessions persistantes (30 jours) augmentent le risque de session compromise
* Recommandation : Utiliser HTTPS uniquement
* Les cookies de session doivent être `httpOnly` et `secure`
* Les sessions doivent être révoquables depuis les paramètres utilisateur

## ✅ Critères d'Acceptation

1. ✅ La case "Se souvenir de moi" est présente dans le formulaire de connexion
2. ✅ Le paramètre `remember` est transmis du frontend au backend
3. ✅ Les sessions avec "remember me" ont une expiration de 30 jours
4. ✅ Les sessions sans "remember me" ont une expiration de 7 jours
5. ✅ La session persiste après fermeture du navigateur si "remember me" est coché
6. ✅ La documentation Mintlify est mise à jour
7. ✅ Les tests unitaires backend passent
8. ✅ Les tests Playwright UI passent
