@@ -32,6 +32,7 @@ can use one of the many wrappers available on npm, like
3232 - [ Simple server] ( #simple-server )
3333 - [ External HTTP/S server] ( #external-https-server )
3434 - [ Multiple servers sharing a single HTTP/S server] ( #multiple-servers-sharing-a-single-https-server )
35+ - [ Client authentication] ( #client-authentication )
3536 - [ Server broadcast] ( #server-broadcast )
3637 - [ echo.websocket.org demo] ( #echowebsocketorg-demo )
3738 - [ Use the Node.js streams API] ( #use-the-nodejs-streams-api )
@@ -249,6 +250,40 @@ server.on('upgrade', function upgrade(request, socket, head) {
249250server .listen (8080 );
250251```
251252
253+ ### Client authentication
254+
255+ ``` js
256+ const http = require (' http' );
257+ const WebSocket = require (' ws' );
258+ const url = require (' url' );
259+
260+ const server = http .createServer ();
261+ const wss = new WebSocket.Server ({ noServer: true });
262+
263+ wss .on (' connection' , function (ws , request , client ) {
264+ ws .on (' message' , function (message ) {
265+ console .log (` WS message ${ message} from user ${ client} ` );
266+ });
267+ });
268+
269+ server .on (' upgrade' , function upgrade (request , socket , head ) {
270+ authenticate (request, (err , client ) => {
271+ if (err || ! client) {
272+ socket .destroy ();
273+ return ;
274+ }
275+ wss .handleUpgrade (request, socket, head, function done (ws ) {
276+ wss .emit (' connection' , ws, request, client);
277+ });
278+ });
279+ });
280+
281+ server .listen (8080 );
282+ ```
283+
284+ Also see the provided [ example] ( ./examples/express-session-parse ) using
285+ ` express-session ` .
286+
252287### Server broadcast
253288
254289A client WebSocket broadcasting to all connected WebSocket clients, including
0 commit comments