Langage :
Authentification Gateway
Les utilisateurs s'authentifient via JWT Bearer. Les bots ont leur propre token dédié.
Connexion utilisateur
POST
/api/auth/loginRetourne un JWT (15 min) et un refresh token (1 an)
POST /api/auth/login
js
const res = await fetch('https://gateway.alfychat.app/api/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: 'user@example.com', password: 'motdepasse' }),
});
const { token, refreshToken, user } = await res.json();
sessionStorage.setItem('token', token);
console.log('Connecté en tant que :', user.username);Réponse
200 OK
json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", // JWT, 15 minutes
"refreshToken": "a1b2c3d4e5f6...", // 1 an (365 jours)
"user": {
"id": "u1a2b3c4-...",
"username": "Alice",
"email": "alice@example.com",
"avatar": "https://media.alfychat.app/avatars/...",
"isVerified": true
}
}Utiliser le JWT
Requête protégée
http
GET /api/users/me HTTP/1.1
Host: gateway.alfychat.app
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...Refresh du token
POST
/api/auth/refreshObtenir un nouveau JWT via le refresh token
POST /api/auth/refresh
json
// Corps de la requête
{ "refreshToken": "a1b2c3d4e5f6..." }
// Réponse 200
{
"token": "nouveau.jwt.ici",
"refreshToken": "nouveau.refresh.token"
}Autres endpoints auth
POST
/api/auth/registerCréer un nouveau compte utilisateur
POST
/api/auth/logoutInvalider la session (refresh token révoqué)
GET
/api/users/meProfil de l'utilisateur connecté
PATCH
/api/users/meModifier le profil (username, avatar, bio, statut)
POST
/api/bots/authenticateVérifier et authentifier un token bot
Sécurité des tokens
- Stockez le JWT en mémoire ou dans un cookie
HttpOnly(pas localStorage) - Un JWT expiré retourne
401 Unauthorized— rafraîchissez-le avant expiration - En cas de compromission du refresh token, appelez
/logoutpour le révoquer