You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS用axios请求时Rails未在响应头返回Authorization token但Postman正常

问题原因及解决方案

核心问题是浏览器跨域资源共享(CORS)规范的限制:默认只允许前端访问6种基础响应头,自定义头Authorization必须后端主动配置暴露才允许前端读取,Postman不受CORS规则限制,所以可以正常拿到头信息。

你需要逐一检查以下配置:

1. 修复Rails CORS配置

你大概率使用了rack-cors gem处理跨域,找到config/initializers/cors.rb文件,在资源配置中添加expose规则:

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'http://localhost:3000' # 替换为你的NextJS前端实际域名,生产环境禁止用通配符*
    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head],
      expose: ['Authorization'], # 必须添加此行,暴露Authorization头给前端
      credentials: true # 如果请求需要携带Cookie则添加此配置
  end
end

修改完成后重启Rails服务生效。

2. 调整axios请求配置

如果后端开启了credentials规则,axios需要同步开启跨域带凭证配置:

// 全局配置
axios.defaults.withCredentials = true

// 单请求配置示例
axios.post('/api/login', loginParams, {
  withCredentials: true
}).then(res => {
  // 注意axios返回的响应头key为小写,不要用大写Authorization取值
  const token = res.headers.authorization
  localStorage.setItem('token', token)
})

3. 校验Devise-JWT配置

打开config/initializers/devise.rb确认JWT配置没有异常:

  • 确保config.jwt_header = 'Authorization'为默认配置,没有被修改为其他自定义头名
  • 确认你配置的JWT失效策略不会在登录请求完成后立即清空生成的token

4. 排查代理过滤问题

如果你在NextJS中配置了接口反向代理,检查next.config.js的代理规则,确认没有过滤掉Authorization响应头。

内容的提问来源于stack exchange,提问作者JeffreyP7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:06:03