Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Secbone/koa-session2
Middleware for Koa2 to get/set session
https://github.com/Secbone/koa-session2
koa2 nodejs
Last synced: 25 days ago
JSON representation
Middleware for Koa2 to get/set session
- Host: GitHub
- URL: https://github.com/Secbone/koa-session2
- Owner: Secbone
- License: mit
- Created: 2016-01-29T14:55:49.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2019-12-10T01:43:13.000Z (about 5 years ago)
- Last Synced: 2024-11-13T22:05:12.358Z (30 days ago)
- Topics: koa2, nodejs
- Language: JavaScript
- Homepage:
- Size: 90.8 KB
- Stars: 152
- Watchers: 8
- Forks: 30
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-koa - koa-session2 - Koa2 的中间件,用于获取/设置与自定义存储(如 Redis 或 mongodb)一起使用的会话。 ![](https://img.shields.io/github/stars/Secbone/koa-session2.svg?style=social&label=Star) ![](https://img.shields.io/npm/dm/koa-session2.svg?style=flat-square) (仓库 / 中间件)
README
# koa-session2
[![NPM version][npm-image]][npm-url]
[![Build Status][travis-image]][travis-url]
[![Downloads][downloads-image]][downloads-url]
[![Test coverage][codecov-image]][codecov-url]Middleware for [Koa2](https://github.com/koajs/koa) to get/set session use with custom stores such as Redis or mongodb
Use native ES6(async/await) by Nodejs v7.6.0 +
Or you can use the old versions:
- [babel](https://github.com/Secbone/koa-session2/tree/babel)
- [node6](https://github.com/Secbone/koa-session2/tree/node6)## Require
node v7.6 +## Install
```
npm install koa-session2
```## Usage
```js
const Koa = require("koa");
const session = require("koa-session2");const app = new Koa();
app.use(session({
key: "SESSIONID", //default "koa:sess"
}));
```### Custom Stores
Store.js
```js
const Redis = require("ioredis");
const { Store } = require("koa-session2");class RedisStore extends Store {
constructor() {
super();
this.redis = new Redis();
}async get(sid, ctx) {
let data = await this.redis.get(`SESSION:${sid}`);
return JSON.parse(data);
}async set(session, { sid = this.getID(24), maxAge = 1000000 } = {}, ctx) {
try {
// Use redis set EX to automatically drop expired sessions
await this.redis.set(`SESSION:${sid}`, JSON.stringify(session), 'EX', maxAge / 1000);
} catch (e) {}
return sid;
}async destroy(sid, ctx) {
return await this.redis.del(`SESSION:${sid}`);
}
}module.exports = RedisStore;
```
main.js
```js
const Koa = require("koa");
const session = require("koa-session2");
const Store = require("./Store.js");const app = new Koa();
app.use(session({
store: new Store()
}));app.use(ctx => {
let user = ctx.session.user;ctx.session.view = "index";
});app.use(ctx => {
// refresh session if set maxAge
ctx.session.refresh()
})
```## Options
Most options based on [cookies](https://github.com/pillarjs/cookies#cookiesset-name--value---options--)
- `key`: a string for store session id in cookie
- `store`: a class for custom store (extend {Store}, func: #get(sid), #set(session, opts), #destory(sid))
- `maxAge`: a number representing the milliseconds from `Date.now()` for expiry
- `expires`: a `Date` object indicating the cookie's expiration date (expires at the end of session by default).
- `path`: a string indicating the path of the cookie (`/` by default).
- `domain`: a string indicating the domain of the cookie (no default).
- `secure`: a boolean indicating whether the cookie is only to be sent over HTTPS (`false` by default for HTTP, `true` by default for HTTPS).
- `httpOnly`: a boolean indicating whether the cookie is only to be sent over HTTP(S), and not made available to client JavaScript (`true` by default).
- `sameSite`: a boolean or string indicating whether the cookie is a "same site" cookie (`false` by default). This can be set to `'strict'`, `'lax'`, or `true` (which maps to `'strict'`).
- `signed`: a boolean indicating whether the cookie is to be signed (`false` by default). If this is true, another cookie of the same name with the `.sig` suffix appended will also be sent, with a 27-byte url-safe base64 SHA1 value representing the hash of _cookie-name_=_cookie-value_ against the first [Keygrip](https://www.npmjs.com/package/keygrip) key. This signature key is used to detect tampering the next time a cookie is received.
- `overwrite`: a boolean indicating whether to overwrite previously set cookies of the same name (`false` by default). If this is true, all cookies set during the same request with the same name (regardless of path or domain) are filtered out of the Set-Cookie header when setting this cookie.## Methods
- `refresh()`: if you set `maxAge` in options, you can call `ctx.session.refresh()` to refresh session to your store
## License
MIT
[npm-image]: https://img.shields.io/npm/v/koa-session2.svg?style=flat-square
[npm-url]: https://npmjs.org/package/koa-session2
[downloads-image]: http://img.shields.io/npm/dm/koa-session2.svg?style=flat-square
[downloads-url]: https://npmjs.org/package/koa-session2
[travis-image]: https://img.shields.io/travis/Secbone/koa-session2/master.svg?style=flat-square
[travis-url]: https://travis-ci.org/Secbone/koa-session2
[codecov-image]: https://img.shields.io/codecov/c/github/Secbone/koa-session2/master.svg?style=flat-square
[codecov-url]: https://codecov.io/gh/Secbone/koa-session2/branch/master