Module AUTH Discord
Introduction
Ce module gère toute l’authentification Discord, les sessions utilisateur,
les webhooks et la vérification de guilde.
Fonctionnalités principales :
- OAuth2 Discord
- Gestion utilisateur DB
- Sessions sécurisées
- Remember me
- Vérification guilde
1. Configuration centrale
$CONFIG = [
'guilds' => [
'target_id' => 'xxxxxxxxxxx',
'target_name' => 'Edelweiss',
],
'discord' => [
'client_id' => 'xxxxxxxxxxx',
'client_secret' => 'xxxxxxxxxxx',
'oauth_url' => 'https://discord.com/api/oauth2/authorize',
'token_url' => 'https://discord.com/api/oauth2/token',
'api_me' => 'https://discord.com/api/users/@me'
],
'webhook' => [
'event_publish' => 'https://discord.com/api/webhooks/xxx',
'post_publish' => 'https://discord.com/api/webhooks/xxx'
],
'bot' => [
'token' => 'xxxxxxxxxxx'
]
];
2. Helpers globaux
function h($s) {
return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}
function generate_token($len = 32) {
return bin2hex(random_bytes($len));
}
function secure_setcookie($name, $value, $exp) {
setcookie($name, $value, [
'expires' => $exp,
'path' => '/',
'secure' => !empty($_SERVER['HTTPS']),
'httponly' => true,
'samesite' => 'Lax'
]);
}
3. Authentification Discord (OAuth2)
header("Location: $DISCORD_OAUTH_URL?" . http_build_query([
'client_id' => $DISCORD_CLIENT_ID,
'redirect_uri' => $DISCORD_REDIRECT,
'response_type' => 'code',
'scope' => 'identify guilds'
]));
4. Gestion utilisateur
$me = json_decode(curl_exec($ch), true);
$discord_id = $me['id'];
$username = $me['username'].'#'.$me['discriminator'];
$avatar = $me['avatar'] ?? null;
Utilisateur créé ou mis à jour automatiquement en base de données.
5. Webhooks Discord
function publierEventDiscord(array $e) {
$payload = [
'embeds' => [[
'title' => "Evenement FFXIV",
'description' => $e['nom'],
'url' => $e['lien']
]]
];
}
6. Sessions sécurisées
session_set_cookie_params([
'httponly' => true,
'secure' => true,
'samesite' => 'Lax'
]);
session_start();
7. Remember Me
$token = generate_token(32);
setcookie('remember_me', $token, time() + 2592000);
8. Vérification de guilde Discord
function getGuildMember($botToken, $guildId, $userId) {
$url = "https://discord.com/api/guilds/$guildId/members/$userId";
}