Dreamacro / koa-wxsession

Wechat session authorization and validation middleware
MIT License
14 stars 1 forks source link

有没有koa-wxsession和egg框架结合的例子看看 #1

Closed ityao closed 7 years ago

ityao commented 7 years ago

有点纠结

Dreamacro commented 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
}
ityao commented 7 years ago

怎么存储用户的session数据呢?

Dreamacro commented 7 years ago

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)