fastify-pithy-session
v0.0.1
Published
fastify session 插件。
Downloads
3
Readme
fastify-pithy-session
Fastify插件用于读取和设置 session
。
原理
- 在
fastify
的onRequest
钩子里面解析session
同时计算session
值的hash
保存到fastify.prevSessionHash
里面;如果有renew = true
,则在fastify.prevSessionExpire
保存过期信息。 - 在
fastify
的onSend
钩子里面判断是否需要重新保存,依据如下:- 进行过
session
更改, 判断当前session
的hash
是否和fastify.prevSessionHash
一致。 rolling
是否为true
renew = true
并且快要过期。
- 进行过
依赖
当前插件依赖 fastify-cookie
安装
npm i fastify-cookie fastify-pithy-session
配置
引入并注册到 fastify
插件。
const fastify = require('fastify')();
app.register(require('fastify-cookie'), {
// 如果 session 配置了 signed 则需要添加这个参数进行签名。
secret: ['23a79fa38d2578d6'],
});
fastify.register(require('@tenny/fastify-session'), {
renew: true,
rolling: false,
key: 'fastify_sess',
cookie: {
maxAge: 86400, // 到期时间, 一天
httpOnly: true,
signed: true,
},
});
fastify.listen(3000);
配置项
key
- {String
}:cookie key
,默认为:'fastify_sess'
rolling
- {Boolean
}: 强制每一次响应的时候都进行一次数据保存,默认为:false
renew
- {Boolean
}: 当 session 快过期的时候,保存数据,重新刷新有效期,默认为:false
cookie
- {Object
}:fastify-cookie Sending options配置项,默认:{ maxAge: 86400, httpOnly: true, signed: true }
如果同时配置了
rolling
和renew
则rolling
的优先级高于renew
,就是说如果配置了rolling
则不需要配置renew
。
使用
// 1. 获取 session
let session = req.session;
// 2. 设置 session
req.session = { login: true };
// 或者
req.session.login = true;