Google adding ...
This commit is contained in:
parent
f43a216cbd
commit
9e7d81323b
4 changed files with 69 additions and 1 deletions
BIN
database.sqlite
BIN
database.sqlite
Binary file not shown.
|
|
@ -9,7 +9,8 @@ function initDb(dbPath = './database.sqlite') {
|
|||
db.run(`CREATE TABLE IF NOT EXISTS users (
|
||||
id TEXT PRIMARY KEY,
|
||||
username TEXT,
|
||||
discord_id TEXT,
|
||||
discord_id TEXT DEFAULT NULL,
|
||||
google_id TEXT DEFAULT NULL,
|
||||
discriminator TEXT,
|
||||
avatar TEXT
|
||||
)`, (err) => {
|
||||
|
|
|
|||
55
modules/auth/google.js
Normal file
55
modules/auth/google.js
Normal 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" });
|
||||
}
|
||||
};
|
||||
|
|
@ -12,3 +12,15 @@ module.exports.getUserByDId = async (discordId) => {
|
|||
});
|
||||
});
|
||||
}
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue