【问题标题】:Vercel Production Branch is stripping Authorization header on POST to Serverless Function APIVercel 生产分支正在将 POST 上的授权标头剥离到无服务器函数 API
【发布时间】:2022-03-18 01:20:31
【问题描述】:

API 没有什么特别之处,但我有一个无服务器函数 POST API,它需要一个 Authorization 标头进行验证,然后写入数据库。

例如:

     curl --location --request POST 'https://myserver.server.com/api/endpoint' \
        --header 'Authorization: Bearer blahblahblahblah'

在 Vercel 预览分支中,我可以让它工作,并且 Authorization 标头按预期传递给我的 API。当我在生产中对此进行测试时,Authorization 标头会从请求中删除(通过记录原始请求标头来解决)。对于 Authorization 标头,Preview 和 Production 之间有什么区别?我需要做什么才能在生产中转发标头?

任何帮助将不胜感激。提前致谢!

【问题讨论】:

  • 这里一样 - 不知道如何处理那个:D

标签: next.js serverless vercel authorization-header


【解决方案1】:

这似乎是 Vercel 中的一个错误(已通知支持)所以让我们等待他们说什么。我假设他们自己使用 authorization 标头,然后将其丢弃。有点奇怪,这只发生在 PROD 中,但我们会看到。

解决方法

幸运的是,对我们来说,这很容易解决。我已经发布了我更新的函数来说明这一点。主要是使用 any 标头而不是 authorization

我使用的是x_authorization,但名称完全是任意的。

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  if (req.method === 'POST') {
    //using 'custom' x_authorization header because the regular 'authorization' header is stripped by Vercel in PROD environments.
    const { x_authorization } = req.headers

    if (x_authorization === `Bearer ${process.env.CRON_API_KEY}`) {
      
      //TODO: YOU DO YOUR THING HERE!!!

      res.status(200).json()
    } else {
      res.status(401).end()
    }
  } else {
    res.setHeader('Allow', 'POST')
    res.status(405).end('Method Not Allowed')
  }
}

【讨论】:

  • 感谢 sn-p。我也使用了类似的解决方法,但不是自定义标头,而是在 POST 正文中传递授权。如果标题中缺少授权,我的代码实际上会检查正常的标题并回退到正文。
  • @caseinc 是否愿意将响应标记为答案?
猜你喜欢
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 2023-03-16
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2016-12-09
相关资源
最近更新 更多