https://github.com/dongss/koa-socketio-session
A socket.io middleware to share session from Koa app.
https://github.com/dongss/koa-socketio-session
koa middleware session socketio
Last synced: 8 months ago
JSON representation
A socket.io middleware to share session from Koa app.
- Host: GitHub
- URL: https://github.com/dongss/koa-socketio-session
- Owner: Dongss
- License: mit
- Created: 2017-12-06T03:00:12.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-02-03T00:39:11.000Z (over 3 years ago)
- Last Synced: 2025-09-13T03:09:55.042Z (9 months ago)
- Topics: koa, middleware, session, socketio
- Language: TypeScript
- Size: 1.4 MB
- Stars: 8
- Watchers: 2
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# koa-socketio-session
[](https://travis-ci.org/Dongss/koa-socketio-session)
[](https://coveralls.io/github/Dongss/koa-socketio-session?branch=master)
[](https://dependencyci.com/github/Dongss/koa-socketio-session)
A [socket.io](https://socket.io/docs/) middleware to share session from Koa app.
Get koa app session by: `let mySession = socket.session;`
## Require
* Koa2
* Node 7.6 or greater for async/await support
## Supported Koa session middlewares
* [koa-session](https://github.com/koajs/session)
* [koa-generic-session](https://github.com/koajs/generic-session)
* [koa-session2](https://github.com/Secbone/koa-session2)
## Install
`npm install koa-socketio-session --save`
## Usage
### koa-session
[koa-session](https://github.com/koajs/session)
Notice:
If you are using koa-session >= 6.0.0, you must pass `key` option. [koa-session 6.x issue](https://github.com/koajs/session#notice)
`const koaSocketioSession = require('koa-socketio-session').HandleKoaSession;`
koaSocketioSession(app, opt)
* opt, see [koa-session options](https://github.com/koajs/session#options), `store` is required in opt
[example](https://github.com/Dongss/koa-socketio-session/tree/master/examples/koa-session.example.js)
```
const Koa = require('koa');
const session = require('koa-session');
const koaSocketioSession = require('koa-socketio-session').HandleKoaSession;
const app = new Koa();
// session store
class Store {
async get(sid) {
// ...
}
async set(sid = this.getID(24), session, maxAge) {
// ...
}
destroy(sid) {
// ...
}
}
app.keys = ['koa2', 'socketio', 'koa-session'];
const sessionOpt = {
store: new Store(),
key: '4lKSd^Qma*3',
};
app.use(session(sessionOpt, app));
const server = app.listen(3000, () => {
console.log('server listen on 3000');
});
const io = require('socket.io')(server, {
path: '/websocket',
cookie: true
});
io.use(koaSocketioSession(app, sessionOpt));
io.use((socket, next) => {
let s = socket.session;
if (!s || !s.logined) {
return next(new Error('unauthorized'));
}
return next();
});
io.on('connection', (socket) => {
let s = socket.session;
console.log(s);
socket.use((p, next) => {
let s = socket.session;
if (!s || !s.logined) {
return next(new Error('unauthorized'));
}
return next();
});
});
```
### koa-generic-session
[koa-generic-session](https://github.com/koajs/generic-session)
`const koaSocketioSession = require('koa-socketio-session').HandleKoaGenericSession;`
koaSocketioSession(app, opt)
* opt, see [koa-generic-session options](https://github.com/koajs/generic-session#options), `store` is required in opt
[example](https://github.com/Dongss/koa-socketio-session/tree/master/examples/koa-generic-session.example.js)
```
const Koa = require('koa');
const session = require('koa-generic-session');
// const Store = require('koa-generic-session/lib/memory_store');
const redisStore = require('koa-redis');
const koaSocketioSession = require('koa-socketio-session').HandleKoaGenericSession;
const app = new Koa();
app.keys = ['koa2', 'socketio', 'koa-generic-session'];
const sessionOpt = {
store: new redisStore(),
key: '4lKSd^Qma*3',
};
app.use(session(sessionOpt));
const server = app.listen(3000, () => {
console.log('server listen on 3000');
});
const io = require('socket.io')(server, {
path: '/websocket',
cookie: true
});
io.use(koaSocketioSession(app, sessionOpt));
io.use((socket, next) => {
let s = socket.session;
if (!s || !s.logined) {
return next(new Error('unauthorized'));
}
return next();
});
io.on('connection', (socket) => {
let s = socket.session;
console.log(s);
socket.use((p, next) => {
let s = socket.session;
if (!s || !s.logined) {
return next(new Error('unauthorized'));
}
return next();
});
});
```
### koa-session2
[koa-session2](https://github.com/Secbone/koa-session2)
`const koaSocketioSession = require('koa-socketio-session').HandleKoaSession2;`
koaSocketioSession(app, store, key)
* opt, see [koa-session2 options](https://github.com/Secbone/koa-session2#options), `store` is required in opt
[example](https://github.com/Dongss/koa-socketio-session/tree/master/examples/koa-session2.example.js)
```
const Koa = require('koa');
const session = require('koa-session2');
const koaSocketioSession = require('koa-socketio-session').HandleKoaSession2;
const app = new Koa();
// session store
class Store {
constructor() {
}
async get(sid) {
// ...
}
async set(session, { sid = this.getID(24), maxAge } = {}) {
// ...
}
destroy(sid) {
// ...
}
}
app.keys = ['koa2', 'socketio', 'koa-session2'];
const sessionOpt = {
store: new Store(),
key: '4lKSd^Qma*3',
};
app.use(session(sessionOpt));
const server = app.listen(3000, () => {
console.log('server listen on 3000');
});
const io = require('socket.io')(server, {
path: '/websocket',
cookie: true
});
io.use(koaSocketioSession(app, sessionOpt));
io.use((socket, next) => {
let s = socket.session;
if (!s || !s.logined) {
return next(new Error('unauthorized'));
}
return next();
});
io.on('connection', (socket) => {
let s = socket.session;
console.log(s);
socket.use((p, next) => {
let s = socket.session;
if (!s || !s.logined) {
return next(new Error('unauthorized'));
}
return next();
});
});
```
## Test
`npm test`