Discord propose une API OAuth 2 complète qui permet d’intégrer son système d’authentification dans n’importe quelle application web. Dans cette vidéo, nous connectons Symfony à l’API Discord pour permettre aux utilisateurs de se connecter avec leur compte Discord.
Configurer l’application sur le portail développeur Discord
La première étape consiste à créer une application sur le portail développeur Discord. Depuis le tableau de bord :
- Cliquer sur « New Application » et lui donner un nom
- Dans la section OAuth2, récupérer le Client ID et le Client Secret
- Ajouter l’URL de redirection :
http://127.0.0.1:8000/discord/check
Les scopes à activer sont identify (informations de base du compte) et email (adresse email de l’utilisateur Discord).
Créer le projet Symfony
symfony new discord-auth --webapp
Créer ensuite un fichier .env.local (non commité) avec les identifiants Discord :
DISCORD_CLIENT_ID=votre_client_id
DISCORD_CLIENT_SECRET=votre_client_secret
Construire l’URL d’autorisation Discord
https://discord.com/oauth2/authorize
?client_id=CLIENT_ID
&redirect_uri=http%3A%2F%2F127.0.0.1%3A8000%2Fdiscord%2Fcheck
&response_type=code
&scope=identify+email
Quand l’utilisateur clique sur « Se connecter avec Discord », il est redirigé vers cette URL, s’authentifie, puis Discord le redirige vers notre application avec un code d’autorisation.
Récupérer le jeton et les informations utilisateur
Dans le contrôleur Symfony, la route /discord/check reçoit le code en paramètre GET. On échange ce code contre un access token via une requête POST à l’API Discord (/oauth2/token), puis on récupère les informations de l’utilisateur avec le token obtenu (/users/@me).
Pour aller plus loin
Ce système peut être étendu avec Symfony Security pour créer ou mettre à jour automatiquement l’utilisateur en base de données lors de chaque connexion. Retrouvez la démo complète sur YouTube.