Skip to content

Commit 64e0ad6

Browse files
committed
Provide more thorough usage example
The new usage example now shows more than just initializing middleware, in order to demonstrate how some middlewares must be injected with the request and response objects from the socket upon execution, e.g. passport.authenticate()
1 parent 3d027b1 commit 64e0ad6

File tree

1 file changed

+45
-5
lines changed

1 file changed

+45
-5
lines changed

README.md

+45-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# ious [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coveralls-image]][coveralls-url]
1+
# ious [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url]
22
> use express middleware on socket.io namespaces
33
44
## Installation
@@ -18,13 +18,55 @@ var ious = require('ious')(io);
1818

1919
// some friendly connect/express middlewares
2020
var cookieParser = require('cookie-parser');
21-
var passport = require('passport'); // <- i recommend using the JWT strategy
21+
var passport = require('passport');
22+
var JwtStrategy = require('passport-jwt').Strategy;
2223

23-
// this is how we do it
24+
passport.use(new JwtStrategy({
25+
secretOrKey: 'YourSecretIsSafeWithMe',
26+
jwtFromRequest: function(request) {
27+
var token = null;
28+
if (request && request.cookies) {
29+
token = request.cookies.jwt;
30+
}
31+
return token;
32+
}
33+
}, function (credentials, done) {
34+
// something like this
35+
require('./user').findOne({ id: credentials.userId }, function(error, user) {
36+
if(error) {
37+
return done(error);
38+
}
39+
if(user) {
40+
return done(null, user);
41+
}
42+
done(null, false);
43+
});
44+
}));
45+
46+
// now we're cooking with fire
2447
ious(cookieParser());
2548
ious(passport.intialize());
2649

2750
// carry on...
51+
52+
io.on('connection', function (socket) {
53+
// only allow admin roles on this handler
54+
socket.on('do something as an admin', function (callback) {
55+
passport.authenticate('jwt', function (error, user, info) {
56+
if (error) {
57+
return callback(error);
58+
}
59+
if (info instanceof Error) {
60+
return callback(info);
61+
}
62+
if (!user || user.role !== 'admin') {
63+
return callback('User Not Authenticated');
64+
}
65+
// user is authenticated and authorized
66+
return require('./admin').doSomething(callback);
67+
})(socket.request, socket.request.res, callback);
68+
});
69+
});
2870
```
2971
## License
3072

@@ -37,5 +79,3 @@ ISC © [Buster Collings](https://about.me/buster)
3779
[travis-url]: https://travis-ci.org/busterc/ious
3880
[daviddm-image]: https://david-dm.org/busterc/ious.svg?theme=shields.io
3981
[daviddm-url]: https://david-dm.org/busterc/ious
40-
[coveralls-image]: https://coveralls.io/repos/busterc/ious/badge.svg
41-
[coveralls-url]: https://coveralls.io/r/busterc/ious

0 commit comments

Comments
 (0)