Skip to content

Commit b997b82

Browse files
fix: only disconnect the current session on logout
Other sessions of the same user are left alive.
1 parent 32154cf commit b997b82

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

server/src/auth/logout.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
1-
import { logger, userRoom } from "../util.js";
1+
import { logger, sessionRoom } from "../util.js";
22

33
export function logout({ app, io }) {
44
app.post("/logout", (req, res, next) => {
5+
const sessionId = req.session.id;
56
const userId = req.user.id;
67

78
req.logout((err) => {
89
if (err) {
910
return next(err);
1011
}
1112

12-
logger.info("user [%s] has logged out", userId);
13+
logger.info(
14+
"user [%s] has logged out from session [%s]",
15+
userId,
16+
sessionId,
17+
);
1318

14-
io.in(userRoom(userId)).disconnectSockets();
19+
io.in(sessionRoom(sessionId)).disconnectSockets();
1520

1621
res.status(204).end();
1722
});

server/src/index.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,13 @@ import { getUser } from "./user/get.js";
1818
import { initAuth } from "./auth/index.js";
1919
import { reachUser } from "./user/reach.js";
2020
import { searchUsers } from "./user/search.js";
21-
import { channelRoom, userRoom, userStateRoom, logger } from "./util.js";
21+
import {
22+
channelRoom,
23+
userRoom,
24+
userStateRoom,
25+
logger,
26+
sessionRoom,
27+
} from "./util.js";
2228

2329
const CLEANUP_ZOMBIE_USERS_INTERVAL_IN_MS = 60_000;
2430

@@ -88,6 +94,7 @@ function initEventHandlers({ io, db, config }) {
8894
});
8995

9096
socket.join(userRoom(socket.userId));
97+
socket.join(sessionRoom(socket.request.session.id));
9198

9299
next();
93100
});

server/src/util.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ export function userRoom(userId) {
4242
return `user:${userId}`;
4343
}
4444

45+
export function sessionRoom(sessionId) {
46+
return `session:${sessionId}`;
47+
}
48+
4549
export function userStateRoom(userId) {
4650
return `user_state:${userId}`;
4751
}

0 commit comments

Comments
 (0)