Closed ityao closed 7 years ago
根据 使用 koa 的中间件 这里的官方文档,egg 虽然是基于 koa1 但是是支持 koa2 的 async function 的 对于文档里给出的解决方案,这里可以进行相应的 warp
// 框架所要求的的写法 `(options) => middleware`
// 因为我这里中间件是 `(options) => { authorization, validation }` 的写法,所以进行一些变通
// app/middleware/wxsession.js
const wxsession = require('koa-wxsession')
let instance = null
module.exports = option => {
instance = instance || wxsession(option)
return instance
}
// app/middleware/authorization.js
const wxsession = require('./wxsession')
module.exports = option => wxsession(option).authorization
// app/middleware/validation.js
const wxsession = require('./wxsession')
module.exports = option => wxsession(option).validation
// config/config.default.js
exports.middleware = [ 'authorization', 'validation' ]
exports.authorization = exports.validation = {
// options
}
怎么存储用户的session数据呢?
session 是 authorization 这个中间件进行存储的,如果不写 redis config ,默认使用内存进行存储
// 请求需要 X-Wechat-Code X-Wechat-Data 和 X-Wechat-Signature 的 HTTP 头
// 或者 X-Wechat-Code X-Wechat-Encrypted 和 X-Wechat-IV
router
.post('/auth', authorization, ctx => {
// ctx.state.wxinfo.session 发给小程序端
// 小程序端下次请求使用 X-Wechat-Session 头进行鉴权
ctx.body = { session: ctx.state.wxinfo.session }
})
.get('/secret', validation, ctx => ctx.body = ctx.state.wxinfo)
有点纠结