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 :

  1. Cliquer sur « New Application » et lui donner un nom
  2. Dans la section OAuth2, récupérer le Client ID et le Client Secret
  3. 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.