UNPKG

1.76 kBJavaScriptView Raw
1/**
2 * token处理
3 * @type {string}
4 */
5const logger = require('./../logger/koa-logger')('proxyMiddleWare')
6// 带token http头
7const accessTokenHeaderName = 'x-access-token'
8// 请求来源 http头
9const accessOriginHeaderName = 'x-access-origin'
10
11// 默认cookie配置
12const defaultCookieConfig = {
13 name: '_atk',
14 httpOnly: true,
15 overwrite: true,
16 // 长期有效(20年)
17 maxAge: 1000 * 60 * 60 * 24 * 365 * 20,
18}
19
20module.exports = function createRedis() {
21 const cookieConfig = Object.assign({}, defaultCookieConfig)
22
23 return {
24 /**
25 * 处理请求时的token操作
26 * @param {ctx} ctx - koa ctx
27 * @return {Object} - 需要添加的header头
28 */
29 async handleRequest(ctx) {
30 return {
31 [accessOriginHeaderName]: ctx.query.accessOrigin || 'WAP',
32 }
33 },
34 /**
35 * 处理响应时的token操作
36 * @param {ctx} ctx - koa ctx
37 */
38 async handleResponse(ctx) {
39 logger.info('HandleResponse headers:', ctx.response.headers)
40 const responseToken = ctx.response.headers[accessTokenHeaderName]
41 // 如果后端响应头里没有token,则不设置cookie
42 if (!responseToken) {
43 return
44 }
45 logger.info(`Token found: ${responseToken}', it will be set to cookie.`)
46 // 这里koa-better-http-proxy已经把代理响应头复制到原始响应头了
47 ctx.cookies.set(cookieConfig.name, responseToken, cookieConfig)
48
49 // 删除代理响应的"X-Access-Token"http头
50 delete ctx.response.headers[accessTokenHeaderName]
51 delete ctx.response.headers[accessOriginHeaderName]
52 },
53 }
54}