Browse Source

修改代理请求响应cookie的path

yingp 7 years ago
parent
commit
6abd09daf6
3 changed files with 16 additions and 2 deletions
  1. 1 0
      package.json
  2. 2 1
      plugins/axios.js
  3. 13 1
      server.js

+ 1 - 0
package.json

@@ -8,6 +8,7 @@
     "axios": "^0.15.3",
     "bezier-easing": "^2.0.3",
     "bootstrap": "^3.3.7",
+    "cookiejar": "^2.1.1",
     "cross-env": "^3.1.4",
     "element-ui": "^1.3.7",
     "express": "^4.14.1",

+ 2 - 1
plugins/axios.js

@@ -3,6 +3,7 @@ import axios from 'axios'
 import store from '~store'
 
 const service = axios.create({
+  withCredentials: true,
   baseURL: process.env.proxyUrl || process.env.baseUrl
 })
 
@@ -20,7 +21,7 @@ service.interceptors.request.use(config => {
 
 service.interceptors.response.use(response => {
   const cookies = response.headers['set-cookie']
-  if (cookies && cookies.length && cookies.length > 0) {
+  if (cookies && cookies.length) {
     for (let i = 0; i < cookies.length; i++) {
       if (cookies[i].indexOf('JSESSIONID') > -1) {
         const sessionId = cookies[i]

+ 13 - 1
server.js

@@ -1,6 +1,7 @@
 const Nuxt = require('nuxt')
 const app = require('express')()
 const proxy = require('http-proxy-middleware')
+const cookiejar = require('cookiejar')
 const host = process.env.HOST || '127.0.0.1'
 const port = process.env.PORT || 3000
 process.noDeprecation = true
@@ -25,7 +26,18 @@ if (proxyTable) {
   if (Array.isArray(proxyTable)) {
     app.use(proxy(proxyTable, {
       target: config.env.baseUrl,
-      changeOrigin: true
+      changeOrigin: true,
+      onProxyRes: (proxyRes) => {
+        const setCookieHeaders = proxyRes.headers['set-cookie'] || []
+        const modifiedSetCookieHeaders = setCookieHeaders
+          .map(str => new cookiejar.Cookie(str))
+          .map(cookie => {
+            cookie.path = '/'
+            return cookie
+          })
+          .map(cookie => cookie.toString())
+        proxyRes.headers['set-cookie'] = modifiedSetCookieHeaders
+      }
     }))
   } else {
     Object.keys(proxyTable).forEach((context) => {