Skip to content

Commit 1891ed4

Browse files
authored
fix: use cookieSession (#373)
1 parent 2082cac commit 1891ed4

File tree

3 files changed

+59
-75
lines changed

3 files changed

+59
-75
lines changed

src/server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@
2929
"body-parser": "^1.18.2",
3030
"concurrently": "^7.6.0",
3131
"config": "3.3.6",
32+
"cookie-session": "^2.1.0",
3233
"cors": "^2.8.5",
3334
"date-fns": "^2.11.0",
3435
"dotenv": "^8.2.0",
3536
"email-validator": "^2.0.4",
3637
"express": "^4.16.2",
3738
"express-http-proxy": "^1.6.3",
38-
"express-session": "^1.18.1",
3939
"graphql": "^16.3.0",
4040
"jsonwebtoken": "^8.5.1",
4141
"lodash": "^4.17.21",

src/server/src/index.js

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import { Issuer } from "openid-client";
1313
import dotenv from "dotenv";
1414
import config from "config";
1515
import crypto from "crypto";
16-
import session from "express-session";
16+
import cookieSession from "cookie-session";
17+
1718
dotenv.config();
1819

1920
const app = express();
@@ -51,15 +52,13 @@ async function init() {
5152

5253
// Middleware de session
5354
app.use(
54-
session({
55+
cookieSession({
56+
name: "pc_session",
5557
secret: SESSION, // Clé secrète pour signer le cookie de session
56-
resave: false,
57-
saveUninitialized: false,
58-
cookie: {
59-
secure: true,
60-
httpOnly: true,
61-
sameSite: "none",
62-
},
58+
secure: !isDev(),
59+
httpOnly: true,
60+
sameSite: isDev() ? "lax" : "none",
61+
maxAge: 60 * 60 * 1000,
6362
})
6463
);
6564
app.use((req, res, next) => {
@@ -124,10 +123,7 @@ async function init() {
124123
},
125124
});
126125

127-
req.session.save((err) => {
128-
if (err) return next(err);
129-
res.redirect(authorizationUrl);
130-
});
126+
res.redirect(authorizationUrl);
131127
});
132128

133129
// Route de callback pour gérer la réponse de ProConnect
@@ -155,8 +151,8 @@ async function init() {
155151
// Stocker tokenSet dans la session pour une utilisation ultérieure (par exemple, pour le logout)
156152
req.session.tokenSet = tokenSet;
157153
// Supprimer le state et le nonce de la session après l'appel réussi
158-
delete req.session.state;
159-
delete req.session.nonce;
154+
req.session.state = undefined;
155+
req.session.nonce = undefined;
160156

161157
// Récupérer les informations utilisateur
162158
const userInfo = await proconnectClient.userinfo(tokenSet.access_token);
@@ -189,27 +185,21 @@ async function init() {
189185
return res.redirect("/");
190186
}
191187

188+
// Récupère l’id_token pour la déconnexion OIDC
192189
const { tokenSet } = req.session;
193190

194-
let endSessionUrl = "/";
195-
if (tokenSet && tokenSet.id_token) {
196-
endSessionUrl = proconnectClient.endSessionUrl({
197-
id_token_hint: tokenSet.id_token,
198-
post_logout_redirect_uri: PROCONNECT_POST_LOGOUT_REDIRECT_URI, // ou config.get("...")
199-
});
200-
}
191+
const endSessionUrl = tokenSet?.id_token
192+
? proconnectClient.endSessionUrl({
193+
id_token_hint: tokenSet.id_token,
194+
post_logout_redirect_uri: PROCONNECT_POST_LOGOUT_REDIRECT_URI,
195+
})
196+
: "/";
201197

202-
// Détruire la session côté serveur
203-
req.session.destroy((err) => {
204-
if (err) {
205-
console.error("Session destroy error:", err);
206-
return res.status(500).json({ error: "Erreur lors de la déconnexion" });
207-
}
208-
res.clearCookie("connect.sid");
198+
// Efface entièrement la session (cookie-session)
199+
req.session = null;
209200

210-
// Ne pas rediriger ici, juste renvoyer un succès
211-
res.json({ success: true });
212-
});
201+
// Redirige l’utilisateur vers le fournisseur
202+
res.redirect(endSessionUrl);
213203
});
214204
}
215205

src/server/yarn.lock

Lines changed: 36 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3307,6 +3307,16 @@ convert-source-map@^2.0.0:
33073307
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
33083308
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
33093309

3310+
cookie-session@^2.1.0:
3311+
version "2.1.0"
3312+
resolved "https://registry.yarnpkg.com/cookie-session/-/cookie-session-2.1.0.tgz#ae30b566b2f9f2d8ca2c4936513e6bf181830558"
3313+
integrity sha512-u73BDmR8QLGcs+Lprs0cfbcAPKl2HnPcjpwRXT41sEV4DRJ2+W0vJEEZkG31ofkx+HZflA70siRIjiTdIodmOQ==
3314+
dependencies:
3315+
cookies "0.9.1"
3316+
debug "3.2.7"
3317+
on-headers "~1.0.2"
3318+
safe-buffer "5.2.1"
3319+
33103320
cookie-signature@1.0.1:
33113321
version "1.0.1"
33123322
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.1.tgz#44e072148af01e6e8e24afbf12690d68ae698ecb"
@@ -3317,11 +3327,6 @@ cookie-signature@1.0.6:
33173327
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
33183328
integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
33193329

3320-
cookie-signature@1.0.7:
3321-
version "1.0.7"
3322-
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454"
3323-
integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==
3324-
33253330
cookie@0.1.0:
33263331
version "0.1.0"
33273332
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.0.tgz#90eb469ddce905c866de687efc43131d8801f9d0"
@@ -3332,11 +3337,6 @@ cookie@0.7.1:
33323337
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9"
33333338
integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==
33343339

3335-
cookie@0.7.2:
3336-
version "0.7.2"
3337-
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7"
3338-
integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==
3339-
33403340
cookie@^0.4.1:
33413341
version "0.4.2"
33423342
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
@@ -3347,6 +3347,14 @@ cookiejar@^2.1.0:
33473347
resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b"
33483348
integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==
33493349

3350+
cookies@0.9.1:
3351+
version "0.9.1"
3352+
resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.9.1.tgz#3ffed6f60bb4fb5f146feeedba50acc418af67e3"
3353+
integrity sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==
3354+
dependencies:
3355+
depd "~2.0.0"
3356+
keygrip "~1.1.0"
3357+
33503358
copy-concurrently@^1.0.0:
33513359
version "1.0.5"
33523360
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@@ -3571,18 +3579,18 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
35713579
dependencies:
35723580
ms "2.0.0"
35733581

3574-
"debug@>= 0.7.3 < 1":
3575-
version "0.8.1"
3576-
resolved "https://registry.yarnpkg.com/debug/-/debug-0.8.1.tgz#20ff4d26f5e422cb68a1bacbbb61039ad8c1c130"
3577-
integrity sha512-HlXEJm99YsRjLJ8xmuz0Lq8YUwrv7hAJkTEr6/Em3sUlSUNl0UdFA+1SrY4fnykeq1FVkUEUtwRGHs9VvlYbGA==
3578-
3579-
debug@^3.0.1, debug@^3.1.0, debug@^3.2.7:
3582+
debug@3.2.7, debug@^3.0.1, debug@^3.1.0, debug@^3.2.7:
35803583
version "3.2.7"
35813584
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
35823585
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
35833586
dependencies:
35843587
ms "^2.1.1"
35853588

3589+
"debug@>= 0.7.3 < 1":
3590+
version "0.8.1"
3591+
resolved "https://registry.yarnpkg.com/debug/-/debug-0.8.1.tgz#20ff4d26f5e422cb68a1bacbbb61039ad8c1c130"
3592+
integrity sha512-HlXEJm99YsRjLJ8xmuz0Lq8YUwrv7hAJkTEr6/Em3sUlSUNl0UdFA+1SrY4fnykeq1FVkUEUtwRGHs9VvlYbGA==
3593+
35863594
debug@~0.7.3:
35873595
version "0.7.4"
35883596
resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
@@ -4328,20 +4336,6 @@ express-http-proxy@^1.6.3:
43284336
es6-promise "^4.1.1"
43294337
raw-body "^2.3.0"
43304338

4331-
express-session@^1.18.1:
4332-
version "1.18.1"
4333-
resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.18.1.tgz#88d0bbd41878882840f24ec6227493fcb167e8d5"
4334-
integrity sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==
4335-
dependencies:
4336-
cookie "0.7.2"
4337-
cookie-signature "1.0.7"
4338-
debug "2.6.9"
4339-
depd "~2.0.0"
4340-
on-headers "~1.0.2"
4341-
parseurl "~1.3.3"
4342-
safe-buffer "5.2.1"
4343-
uid-safe "~2.1.5"
4344-
43454339
express@^4.16.2:
43464340
version "4.21.1"
43474341
resolved "https://registry.yarnpkg.com/express/-/express-4.21.1.tgz#9dae5dda832f16b4eec941a4e44aa89ec481b281"
@@ -6170,6 +6164,13 @@ jws@^3.2.2:
61706164
jwa "^1.4.1"
61716165
safe-buffer "^5.0.1"
61726166

6167+
keygrip@~1.1.0:
6168+
version "1.1.0"
6169+
resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226"
6170+
integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==
6171+
dependencies:
6172+
tsscmp "1.0.6"
6173+
61736174
keypress@0.1.x:
61746175
version "0.1.0"
61756176
resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a"
@@ -7523,11 +7524,6 @@ queue-microtask@^1.2.2:
75237524
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
75247525
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
75257526

7526-
random-bytes@~1.0.0:
7527-
version "1.0.0"
7528-
resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b"
7529-
integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==
7530-
75317527
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
75327528
version "2.1.0"
75337529
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -8902,6 +8898,11 @@ tslib@^2.1.0, tslib@^2.4.0:
89028898
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
89038899
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
89048900

8901+
tsscmp@1.0.6:
8902+
version "1.0.6"
8903+
resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
8904+
integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
8905+
89058906
tsutils@^3.21.0:
89068907
version "3.21.0"
89078908
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@@ -9006,13 +9007,6 @@ uglify-js@1.2.5:
90069007
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-1.2.5.tgz#b542c2c76f78efb34b200b20177634330ff702b6"
90079008
integrity sha512-Ps1oQryKOcRDYuAN1tGpPWd/DIRMcdLz4p7JMxLjJiFvp+aaG01IEu0ZSoVvYUSxIkvW7k2X50BCW2InguEGlg==
90089009

9009-
uid-safe@~2.1.5:
9010-
version "2.1.5"
9011-
resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a"
9012-
integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==
9013-
dependencies:
9014-
random-bytes "~1.0.0"
9015-
90169010
uid2@0.0.3:
90179011
version "0.0.3"
90189012
resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82"

0 commit comments

Comments
 (0)