登陆成功,接口扔报401。vue.config.js 配置代理请求,携带cookie

21 篇文章 0 订阅

axios 配置baseUrl,在开发模式下为 ‘/api’,供代理服务器识别

const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)

const instance = axios.create({
  withCredentials: true, // 请求携带cookie
  baseURL: IS_PROD ? 'https://www.xxx.com' : '/api',
  timeout: 1000 * 60 * 10,
})

vue.config.js proxy 配置

  let cookie = '' // 用于保存第一次登陆成功服务端下发的cookie,从代理服务器 proxyRes.headers['set-cookie'] 取出
  devServer: {
    port: 9000,
    open: false,
    overlay: {
      warnings: false,
      errors: true,
    },
    proxy: {
      '/api': { // ‘/api' 对应axios的baseUrl字段
        target: 'https://www.xx.com', // 目标服务器地址
        secure: false,
        ws: false,
        changeOrigin: true, // 是否改变域名
        pathRewrite: {
          // 路径重写
          '^/api': '', // 实际接口是'https://www.xx.com/login', axios发出的是‘/api/login’,被代理服务器捕获,同时路径重写删除‘^/api’成‘/login’,转发到目标服务器
        },
        onProxyReq(proxyReq, req, res) {
          // 1.第一次请求/login接口,没有cookie

          // 3.第二次请求,cookie有值,赋值给req,以后每次请求均赋值
          if (cookie) {
            proxyReq.setHeader('cookie', cookie)
          }
        },
        onProxyRes(proxyRes, req, res) {
          // 2.第一次/login请求返回携带cookie,赋值保存,也仅仅login请求返回cookie
          if (!cookie) {
            cookie = proxyRes.headers['set-cookie']
          }

          // 4.第二次请求以及之后其他接口请求的时候并不返回cookie,所以不能再赋值
        },
      },
    },
  }
  
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于前端Vue项目发送请求携带cookie的问题,您可以按照以下步骤进行排查: 1. 检查vue.config.js配置:在Vue项目中,可以通过vue.config.js文件进行一些配置。请确保在该文件中没有对cookie进行了特殊的配置,比如禁用了cookie的发送。您可以检查是否有类似以下的配置项: ```javascript module.exports = { devServer: { // 是否禁用了发送cookie disableHostCheck: true, // ... }, // ... } ``` 如果存在以上配置,请将其删除或注释掉,以确保cookie能够正常发送。 2. 检查nginx反向代理配置:如果您使用了nginx进行反向代理,也需要检查nginx配置文件中的相关设置。请确保没有对cookie进行了特殊的配置,比如禁用了cookie的转发。您可以检查是否有类似以下的配置项: ```nginx location /api { # 是否禁用了cookie转发 proxy_cookie_path ~^/api/(.*)$ /$1 break; # ... } ``` 如果存在以上配置,请将其删除或注释掉,以确保cookie能够正常转发。 3. 确认接口允许跨域访问:在开发环境下,如果您的接口和前端项目部署在不同的域名下,可能会存在跨域访问的问题。请确保接口服务器允许前端项目的域名进行跨域访问,并在响应中包含Access-Control-Allow-Credentials和Access-Control-Allow-Origin头信息。您可以在接口服务器的响应头中添加以下配置: ``` Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: 前端项目的域名 ``` 请将"前端项目的域名"替换为您实际的前端项目域名。 以上是一些常见的排查步骤,希望能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,我将尽力协助您解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值