|
1 | 1 | import express = require("express");
|
2 |
| -import { createServer, ServerResponse } from "http"; |
| 2 | +import { createServer } from "http"; |
3 | 3 | import { Server } from "socket.io";
|
4 | 4 | import session from "express-session";
|
5 |
| -import { type Request } from "express"; |
| 5 | +import { type Request, type Response } from "express"; |
6 | 6 | import bodyParser = require("body-parser");
|
7 | 7 | import passport = require("passport");
|
8 | 8 | import { Strategy as LocalStrategy } from "passport-local";
|
@@ -91,19 +91,34 @@ passport.deserializeUser((user: Express.User, cb) => {
|
91 | 91 |
|
92 | 92 | const io = new Server(httpServer);
|
93 | 93 |
|
94 |
| -io.engine.use(sessionMiddleware); |
95 |
| -io.engine.use(passport.initialize()); |
96 |
| -io.engine.use(passport.session()); |
| 94 | +function onlyForHandshake( |
| 95 | + middleware: (req: Request, res: Response, next: any) => void, |
| 96 | +) { |
| 97 | + return ( |
| 98 | + req: Request & { _query: Record<string, string> }, |
| 99 | + res: Response, |
| 100 | + next: (err?: Error) => void, |
| 101 | + ) => { |
| 102 | + const isHandshake = req._query.sid === undefined; |
| 103 | + if (isHandshake) { |
| 104 | + middleware(req, res, next); |
| 105 | + } else { |
| 106 | + next(); |
| 107 | + } |
| 108 | + }; |
| 109 | +} |
97 | 110 |
|
| 111 | +io.engine.use(onlyForHandshake(sessionMiddleware)); |
| 112 | +io.engine.use(onlyForHandshake(passport.session())); |
98 | 113 | io.engine.use(
|
99 |
| - (req: { user: Express.User }, res: ServerResponse, next: Function) => { |
| 114 | + onlyForHandshake((req, res, next) => { |
100 | 115 | if (req.user) {
|
101 | 116 | next();
|
102 | 117 | } else {
|
103 | 118 | res.writeHead(401);
|
104 | 119 | res.end();
|
105 | 120 | }
|
106 |
| - }, |
| 121 | + }), |
107 | 122 | );
|
108 | 123 |
|
109 | 124 | io.on("connection", (socket) => {
|
|
0 commit comments