J'essaie de mettre en place des sessions dans mon application node.js. Pour ce faire, j'utilise les modules "express", "express-session" et "express-mysql-session" pour les stocker dans une base de données sur mon serveur. Mon code fonctionne parfaitement tant que j'accède uniquement aux paramètres req.session à l'intérieur de la route où la session est créée. Dans les autres routes (ou même dans le fichier de démarrage), les paramètres créés génèrent une erreur indéfinie.
J'ai déjà essayé de créer le fichier app.use(session(...)) dans le fichier de démarrage. Si je fais cela, tout fonctionne bien et les paramètres qui sont créés dans une route sont également utilisables dans d'autres routes. Mais comme je veux garder le fichier de démarrage aussi petit que possible, ces lignes de code devraient être gérées dans une route.
Voici mon code : login.js (une route)
var express = require('express');
var router = express.Router();
var session = require('express-session');
var MySQLStore = require('express-mysql-session');
var dbOptions = {
host: "ip",
user: "user",
password: "pw",
database: "some db"
};
var sessionStore = MySQLStore(dbOptions);
router.use(session({
key: 'some key',
secret: 'some secret',
store: sessionStore,
resave: false,
saveUninitialized: false
}));
router.post('/login', (req, res) =>{
req.session.username = req.body.username;
res.end("done");
});
router.get('/sessionTest', (req, res) => {
if(req.session.username) {
res.write(`<h1>Hello ${req.session.username} </h1><br>`);
res.end('<a href='+'/timetracking/logout'+'>Logout</a>');
}
else {
res.write('<h1>Please login first.</h1>');
res.end('<a href='+'/timetracking/login'+'>Login</a>');
}
});
router.get('/logout',(req,res) => {
req.session.destroy((err) => {
if(err) {
return console.log(err);
}
res.redirect('/timetracking/login');
});
});
module.exports = router;
timetracking.js (le fichier de démarrage)
var http = require('http');
const express = require('express');
const app = express();
var gets = require('./lib/gets');
var login = require('./lib/login');
const session = require('express-session');
//Make '/timetracking/' to the standard handler for get requests
app.use('/timetracking', [gets, login]);
app.get('/test', (req, res) =>{
res.send(req.session.username);
});
app.listen(80);
Lorsque je charge localhost/test, je peux toujours voir le cookie dans les outils de développement web. Mais "req.session.username" est indéfini.
Merci pour votre aide !