Google adding ...

This commit is contained in:
ExostFlash 2025-08-27 16:30:29 +02:00
parent f43a216cbd
commit 9e7d81323b
4 changed files with 69 additions and 1 deletions

Binary file not shown.

View file

@ -9,7 +9,8 @@ function initDb(dbPath = './database.sqlite') {
db.run(`CREATE TABLE IF NOT EXISTS users ( db.run(`CREATE TABLE IF NOT EXISTS users (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
username TEXT, username TEXT,
discord_id TEXT, discord_id TEXT DEFAULT NULL,
google_id TEXT DEFAULT NULL,
discriminator TEXT, discriminator TEXT,
avatar TEXT avatar TEXT
)`, (err) => { )`, (err) => {

55
modules/auth/google.js Normal file
View file

@ -0,0 +1,55 @@
const axios = require("axios");
const { getUserByDId } = require('../users/getUsers');
const { postUser } = require('../users/postUsers');
const CLIEN_ID = "71229835507-9413gbpdamv2qbcb2ov8oda2oqgcsk8q.apps.googleusercontent.com";
const GOOGLE_SECRET = "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";
const REDIRECT_URI = "http://localhost:3000/auth/google/callback";
exports.handleGoogleAuth = async (code, res) => {
if (!code) return res.status(400).json({ error: "Code de validation manquant" });
try {
const params = new URLSearchParams();
params.append("client_id", CLIEN_ID);
params.append("client_secret", GOOGLE_SECRET);
params.append("grant_type", "authorization_code");
params.append("code", code);
params.append("redirect_uri", GOOGLE_REDIRECT_URI);
const tokenData = await axios.post(
"https://oauth2.googleapis.com/token",
params,
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
}
);
const accessToken = tokenData.data.access_token;
const userResponse = await axios.get("https://www.googleapis.com/oauth2/v2/userinfo", {
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
const userData = userResponse.data;
if (!userData || !userData.id) {
console.error("Réponse Google inattendue:", userResponse.data);
return res.status(500).json({ error: "Impossible de récupérer les infos utilisateur depuis Google", details: userResponse.data });
}
let savedUser = await getUserByGId(userData.id);
if (!savedUser) {
const newUser = {
username: userData.name || userData.email,
google_id: userData.id,
email: userData.email,
avatar: userData.picture || null,
};
savedUser = await postUser(newUser);
}
req.session.user = savedUser;
res.redirect('/');
} catch (err) {
console.error(err.response?.data || err.message);
res.status(500).json({ error: "Erreur lors de la connexion à Google" });
}
};

View file

@ -11,4 +11,16 @@ module.exports.getUserByDId = async (discordId) => {
resolve(row); resolve(row);
}); });
}); });
}
module.exports.getUserByGId = async (discordId) => {
return new Promise((resolve, reject) => {
const query = `SELECT * FROM users WHERE google_id = ?`;
db.get(query, [discordId], (err, row) => {
if (err) {
return reject(err);
}
resolve(row);
});
});
} }