Je suis en pleindans mon projet d'études de fin d'année (prévu pour mi-juillet :)). J'essaye de faire un petit site, et pour me démarquer je ne le fais pas en php mais avec node.js. Je précise donc que je suis nouveau dans cette technologie.
Je mets en place une session dont le store est MySql. Dans le code suivant, j'ai créé une classe 'Session' qui, à première vue, semblait bien fonctionner. Cela génère la table "Session" dans la base de données et le cookie de session est envoyé. Mais les données de session ne sont jamais insérées dans la base de données. Je n'y comprends rien, j'ai suivi plein de tutos et j'ai même demandé à chatGpt en désespoir de cause. De plus, il ne renvoie aucune erreur.
Je précise également que j'utilise les packages : express, dotenv, mysql2, express-session et express-mysql-session.
Pouvez-vous m'aider s'il vous plaît 🙏 ?
Voici le code en question :
Session.js
require("dotenv").config();
const session = require("express-session");
const mysqlStore = require("express-mysql-session")(session);
const mysql = require("mysql2/promise");
class Session {
#dbCo;
#sessionStore;
constructor() {
(async () => {
try {
this.#sessionStore = await this.#startStore();
console.log("Session store prêt");
} catch (err) {
console.error("Echec creation du session store:", err);
}
})();
return session({
resave: false,
saveUninitialized: false,
secret: process.env.SESSION_SECRET,
cookie: {
maxAge: 365 * 24 * 60 * 60 * 1000,
sameSite: "strict",
secure: true,
httpOnly: true,
},
store: this.#sessionStore
});
}
async #startStore() {
try {
this.#dbCo = {
host: process.env.DB_HOST,
user: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
};
const connexion = await mysql.createPool(this.#dbCo);
const sessionStore = new mysqlStore(
{
expiration: 365 * 24 * 60 * 60 * 1000,
createDatabaseTable: true,
schema: {
tableName: "Session"
}
},
connexion
);
await sessionStore.onReady();
//console.log("Session data:", sessionStore);
return sessionStore;
} catch (err) {
console.error(err);
}
}
}
module.exports = Session;
index.js
...
const session = new Session();
app.use(session);
...
loginController.js
//Dans une méthode POST
...
if( //authentification ok ) {
req.session.authenticated = true;
res.status(200).send("Bienvenue 💙🤍❤️");
} else {
res.status(401).send("Invalide 💀💀💀");
}
} catch (err) {
console.log(err);
}
});
...