POST /api/login
Authentifie un utilisateur et retourne un token JWT.
Endpoint
POST /api/login
Headers
| Header | Valeur | Requis |
|---|---|---|
| Content-Type | application/json | Oui |
Corps de la requête
{
"email": "string",
"password": "string"
}
| Champ | Type | Requis | Description |
|---|---|---|---|
| string | Oui | Adresse email de l'utilisateur | |
| password | string | Oui | Mot de passe |
Réponse succès
Code: 200 OK
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE3MDUzMTIzNDUsImV4cCI6MTcwNTMxNTk0NSwicm9sZXMiOlsiUk9MRV9BRE1JTiJdLCJlbWFpbCI6ImFkbWluQHBjaC1zaWcuc24ifQ...",
"refresh_token": "d1f2a3b4c5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0",
"user": {
"id": 1,
"email": "admin@pch-sig.sn",
"nomComplet": "Administrateur",
"roles": ["ROLE_ADMIN"]
}
}
| Champ | Type | Description |
|---|---|---|
| token | string | Token JWT d'accès (durée: 1 heure) |
| refresh_token | string | Token de rafraîchissement (durée: 7 jours) |
| user | object | Informations de l'utilisateur connecté |
Réponses erreur
401 Unauthorized - Identifiants invalides
{
"code": 401,
"message": "Invalid credentials."
}
400 Bad Request - Données manquantes
{
"code": 400,
"message": "The key \"email\" must be provided."
}
403 Forbidden - Compte désactivé
{
"code": 403,
"message": "Account is disabled."
}
Exemples
cURL
curl -X POST https://sig.ucp-pch.org/api/login \
-H "Content-Type: application/json" \
-d '{
"email": "admin@pch-sig.sn",
"password": "Admin123!"
}'
JavaScript
const login = async (email, password) => {
const response = await fetch('https://sig.ucp-pch.org/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ email, password })
});
if (!response.ok) {
throw new Error('Authentication failed');
}
const data = await response.json();
// Stocker le token
localStorage.setItem('token', data.token);
localStorage.setItem('refresh_token', data.refresh_token);
return data;
};
Python
import requests
response = requests.post(
'https://sig.ucp-pch.org/api/login',
json={
'email': 'admin@pch-sig.sn',
'password': 'Admin123!'
}
)
if response.status_code == 200:
data = response.json()
token = data['token']
print(f"Connecté en tant que {data['user']['email']}")
else:
print(f"Erreur: {response.json()['message']}")
Utilisation du token
Une fois le token obtenu, incluez-le dans le header Authorization pour les requêtes suivantes :
curl https://sig.ucp-pch.org/api/menages \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9..."
Structure du token JWT
Le token contient les informations suivantes (payload décodé) :
{
"iat": 1705312345,
"exp": 1705315945,
"roles": ["ROLE_ADMIN"],
"email": "admin@pch-sig.sn",
"user_id": 1
}
| Champ | Description |
|---|---|
| iat | Timestamp de création |
| exp | Timestamp d'expiration |
| roles | Rôles de l'utilisateur |
| Email de l'utilisateur | |
| user_id | ID de l'utilisateur |
Notes
- Le token expire après 1 heure
- Utilisez le
refresh_tokenpour obtenir un nouveau token sans re-saisir les identifiants - Ne stockez jamais le token dans un endroit non sécurisé
- En production, utilisez toujours HTTPS