3.3 KiB
3.3 KiB
id | title | challengeType |
---|---|---|
589fc831f9fc0f352b528e77 | Authentication with Socket.IO | 2 |
Description
Add 'passport.socketio' as a dependency and require it as 'passportSocketIo'. Now we just have to tell Socket.IO to use it and set the options. Be sure this is added before the existing socket code and not in the existing connection listener. For your server it should look as follows:
io.use(passportSocketIo.authorize({
cookieParser: cookieParser,
key: 'express.sid',
secret: process.env.SESSION_SECRET,
store: sessionStore
}));
You can also optionally pass 'success' and 'fail' with a function that will be called after the authentication process completes when a client trys to connect.
The user object is now accessible on your socket object as socket.request.user
. For example, now you can add the following: console.log('user ' + socket.request.user.name + ' connected');
and it will log to the server console who has connected!
Submit your page when you think you've got it right. If you're running into errors, you can check out the project up to this point here.
Instructions
Tests
tests:
- text: passportSocketIo is a dependency
testString: getUserInput => $.get(getUserInput('url')+ '/_api/package.json') .then(data => { var packJson = JSON.parse(data); assert.property(packJson.dependencies, 'passport.socketio', 'Your project should list "passport.socketio" as a dependency'); }, xhr => { throw new Error(xhr.statusText); })
- text: passportSocketIo is properly required
testString: getUserInput => $.get(getUserInput('url')+ '/_api/server.js').then(data => { assert.match(data, /require\((['"])passport\.socketio\1\)/gi, 'You should correctly require and instantiate "passport.socketio"');}, xhr => { throw new Error(xhr.statusText); })
- text: passportSocketIo is properly setup
testString: getUserInput => $.get(getUserInput('url')+ '/_api/server.js') .then(data => { assert.match(data, /io\.use\(.+\.authorize\(/gi, 'You should register "passport.socketio" as socket.io middleware and provide it correct options'); }, xhr => { throw new Error(xhr.statusText); })
Challenge Seed
Solution
// solution required