Vercel Production Branch 正在剥离 POST 上的授权标头到无服务器函数 API

cas*_*inc 2 next.js serverless vercel authorization-header

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

例如:

     curl --location --request POST 'https://myserver.server.com/api/endpoint' \
        --header 'Authorization: Bearer blahblahblahblah'
Run Code Online (Sandbox Code Playgroud)

在 Vercel 预览分支中,我能够使其正常工作,并且Authorization标头按预期传递到我的 API。当我在生产中对此进行测试时,Authorization标头将从请求中剥离(通过记录原始请求标头来确定)。预览版和生产版在标题方面有什么区别Authorization?我需要做什么才能在生产中转发标头?

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

Nor*_*ayr 5

这似乎是 Vercel 中的一个错误(已通知支持人员),所以让我们等待他们的说法。我假设他们authorization自己消耗了标头并随后将其丢弃。有点奇怪的是,这种情况只发生在PROD中,但我们将会看到。

解决方法

幸运的是,对我们来说,这很容易解决。我已经发布了更新后的函数来说明这一点。最主要的是使用除授权之外的任何标头

我正在使用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')
  }
}
Run Code Online (Sandbox Code Playgroud)