# Guide de Test - Authentification en Production

## 🧪 Tests à Effectuer

### Test 1: Vérifier la Configuration Backend

Depuis votre serveur de production, exécutez :

```bash
cd /path/to/backend
./scripts/test_auth_cookies.sh
```

Ce script va vérifier :
- ✅ Configuration CORS
- ✅ Cookies avec SameSite=None, Secure, HttpOnly
- ✅ Authentification avec cookies

### Test 2: Test Manuel dans le Navigateur

1. **Vider le cache et les cookies** :
   - Chrome/Edge : `Ctrl+Shift+Delete` (Windows) ou `Cmd+Shift+Delete` (Mac)
   - Cocher "Cookies" et "Cache"
   - Vider

2. **Ouvrir DevTools** :
   - Appuyer sur `F12`
   - Aller dans l'onglet **Network**
   - Cocher "Preserve log"

3. **Se connecter** :
   - Aller sur `https://amifond.vercel.app`
   - Aller sur la page de login
   - Entrer vos identifiants
   - Cliquer sur "Se connecter"

4. **Vérifier la requête de login** :
   - Dans Network, trouver la requête `jwt/create/`
   - Cliquer dessus
   - Onglet **Headers** :
     - Vérifier `Request Headers` > `Origin: https://amifond.vercel.app`
   - Onglet **Response Headers** :
     - Vérifier `Access-Control-Allow-Credentials: true`
     - Vérifier `Access-Control-Allow-Origin: https://amifond.vercel.app`
     - Vérifier `Set-Cookie: access_token=...; ...SameSite=None; Secure; HttpOnly`

5. **Vérifier les cookies** :
   - Aller dans l'onglet **Application** (Chrome) ou **Storage** (Firefox)
   - Cliquer sur **Cookies** dans le panneau gauche
   - Sélectionner `https://amifond-api.awounfouet.com`
   - Vérifier que vous voyez :
     ```
     Name         | Value        | Domain                        | Path | Expires  | HttpOnly | Secure | SameSite
     access_token | eyJ...       | amifond-api.awounfouet.com   | /    | (future) | ✓        | ✓      | None
     refresh_token| eyJ...       | amifond-api.awounfouet.com   | /    | (future) | ✓        | ✓      | None
     ```

6. **Vérifier les requêtes suivantes** :
   - Toujours dans Network
   - Trouver une requête vers `/api/auth/users/me/` ou autre endpoint
   - Vérifier dans **Request Headers** que vous avez :
     ```
     Cookie: access_token=...; refresh_token=...
     ```

### Test 3: Test avec curl (Ligne de Commande)

```bash
# 1. Login et sauvegarder les cookies
curl -X POST https://amifond-api.awounfouet.com/api/auth/jwt/create/ \
  -H "Content-Type: application/json" \
  -H "Origin: https://amifond.vercel.app" \
  -d '{"email":"votre@email.com","password":"votrepassword"}' \
  -c cookies.txt \
  -v

# 2. Utiliser les cookies pour une requête authentifiée
curl -X GET https://amifond-api.awounfouet.com/api/auth/users/me/ \
  -H "Origin: https://amifond.vercel.app" \
  -b cookies.txt \
  -v
```

**Résultat attendu :**
- Première commande : voir `Set-Cookie: access_token=...` dans la réponse
- Deuxième commande : recevoir les données utilisateur (200 OK)

### Test 4: Test JavaScript dans la Console

Ouvrez la console DevTools sur `https://amifond.vercel.app` et exécutez :

```javascript
// Test 1: Vérifier que fetch envoie les cookies
fetch('https://amifond-api.awounfouet.com/api/auth/users/me/', {
  method: 'GET',
  credentials: 'include', // Important !
  headers: {
    'Content-Type': 'application/json',
  }
})
  .then(response => {
    console.log('Status:', response.status);
    return response.json();
  })
  .then(data => console.log('Données:', data))
  .catch(error => console.error('Erreur:', error));
```

**Résultat attendu :** Status 200 et données utilisateur affichées

## ❌ Problèmes Courants et Solutions

### Problème 1: "Authentication credentials were not provided"

**Symptômes :**
- Erreur 401 sur `/api/auth/users/me/`
- Pas de cookies dans DevTools > Application > Cookies

**Solutions :**
1. Vérifier que le backend a bien `domain=None` dans `views.py`
2. Vérifier que `DEBUG=False` en production
3. Vider complètement le cache du navigateur
4. Vérifier les variables d'environnement du backend

### Problème 2: Cookies non envoyés

**Symptômes :**
- Cookies visibles dans DevTools > Application
- Mais pas dans DevTools > Network > Request Headers

**Solutions :**
1. Vérifier que les cookies ont `SameSite=None` et `Secure=true`
2. Vérifier que le frontend utilise HTTPS (pas HTTP)
3. Vérifier que `withCredentials: true` dans Axios (déjà fait)
4. Vérifier que le domaine du cookie correspond au backend

### Problème 3: Erreur CORS

**Symptômes :**
- Message dans la console : "CORS policy: No 'Access-Control-Allow-Origin' header"
- Requêtes en rouge dans Network

**Solutions :**
1. Vérifier `CORS_ALLOWED_ORIGINS` dans settings.py
2. Vérifier que le backend renvoie `Access-Control-Allow-Credentials: true`
3. Vérifier que l'URL du frontend est exactement dans `CORS_ALLOWED_ORIGINS`

### Problème 4: Cookies expirés

**Symptômes :**
- Connexion réussie puis erreur 401 après quelques minutes
- Cookies supprimés automatiquement

**Solutions :**
1. Vérifier `ACCESS_TOKEN_LIFETIME` dans settings.py (actuellement 24h)
2. Implémenter le refresh automatique du token (déjà fait avec `CustomTokenRefreshView`)

## 📊 Checklist de Production

Avant de déployer :

- [ ] Backend déployé avec les dernières modifications
- [ ] `DEBUG=False` en production
- [ ] `CORS_ALLOWED_ORIGINS` contient l'URL Vercel
- [ ] `CORS_ALLOW_CREDENTIALS = True`
- [ ] HTTPS activé sur backend et frontend
- [ ] Cookies avec `domain=None`, `SameSite=None`, `Secure=True`
- [ ] Test avec script `test_auth_cookies.sh` ✅
- [ ] Test manuel dans le navigateur ✅
- [ ] Test avec DevTools pour vérifier les cookies ✅

## 🚀 Après le Déploiement

1. **Tester immédiatement** depuis `https://amifond.vercel.app`
2. **Vérifier les logs du backend** pour toute erreur
3. **Monitorer** les requêtes dans DevTools
4. **Documenter** tout problème rencontré

## 📞 Support

Si les problèmes persistent après avoir suivi ce guide :

1. Vérifier les logs du serveur backend
2. Partager les headers de la requête/réponse (depuis DevTools)
3. Vérifier la configuration HTTPS du serveur
4. Consulter la documentation CORS de Django

## 🔗 Ressources

- [Django CORS Headers](https://github.com/adamchainz/django-cors-headers)
- [MDN - HTTP Cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies)
- [SameSite Cookie Explained](https://web.dev/samesite-cookies-explained/)
