Zeit (Vercel) 现在无服务器身份验证请求因 CORS 而失败

2024-04-12

我在执行以下任一操作时都无法正确处理 CORS 问题PATCH/POST/PUT来自浏览器的请求发送Authorization标题带有一个Bearer token(这在浏览器之外可以正常工作,并且适用于GET请求)中Zeit 现在无服务器 https://zeit.co/docs/v2/serverless-functions/introduction.

我在用着Auth0 https://auth0.com/对于授权方(如果有帮助的话)。


这是我的now.jsonheaders 部分,我尝试了很多组合,但浏览器都没有成功。


  1. 我尝试使用 npmcors打包没有成功
  2. 尝试添加routes in now.json
  3. 尝试使用以下命令在无服务器功能的顶部设置标头res.addHeader()
  4. 也尝试过处理OPTIONS请求手动执行此操作的变体:

最后,这是我得到的错误

Access to XMLHttpRequest at 'https://api.example.org/api/users' from origin 'https://example.org' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

不确定我错了什么或如何正确处理这个问题。


我对 CORS 和 Vercel 无服务器功能有非常类似的问题。

经过很多尝试→失败过程我刚刚找到了解决方案。


解决方案

tldr

最简单的解决方案,只需使用微科尔斯 https://github.com/possibilities/micro-cors.

并有一个类似的实现;

import { NowRequest, NowResponse } from '@now/node';
import microCors from 'micro-cors';

const cors = microCors();

const handler = (request: NowRequest, response: NowResponse): NowResponse => {
  if (request.method === 'OPTIONS') {
    return response.status(200).send('ok');
  }

  // handle incoming request as usual
};

export default cors(handler);

更长的版本,但没有任何新的依赖项

using vercel.json处理请求标头

vercel.json

{
  "headers": [
    {
      "source": "/.*",
      "headers": [
        {
          "key": "Access-Control-Allow-Origin",
          "value": "*"
        },
        {
          "key": "Access-Control-Allow-Headers",
          "value": "X-Requested-With, Access-Control-Allow-Origin, X-HTTP-Method-Override, Content-Type, Authorization, Accept"
        },
        {
          "key": "Access-Control-Allow-Credentials",
          "value": "true"
        }
      ]
    }
  ]
}

自行尝试后,有2个关键重要在上述设置中,

  1. 您必须设置Access-Control-Allow-Origin如你所愿
  2. In Access-Control-Allow-Headers you 必须包括 Access-Control-Allow-Origin成其价值。

那么在无服务器功能中,您仍然需要处理飞行前请求 https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request as well

/api/index.ts

const handler = (request: NowRequest, response: NowResponse): NowResponse => {
  if (request.method === 'OPTIONS') {
    return response.status(200).send('ok');
  }

  // handle incoming request as usual
};

我建议阅读中的代码微科尔斯 https://github.com/possibilities/micro-cors,这是非常简单的代码,您可以在几分钟内理解它会做什么,这使我不关心将其添加到我的依赖项中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Zeit (Vercel) 现在无服务器身份验证请求因 CORS 而失败 的相关文章

  • javascript中映射对象的字符串

    var map new Map map set key1 value1 map set key2 value2 console log map console log map toString console log JSON parse
  • 使用 PHP 的 JavaScript atob 操作

    我想知道是否可以使用 PHP 解密 JavaScript 加密文本 使用 JavaScript 的 btoa 函数加密 看一下base64 decode http php net manual en function base64 deco
  • 获取所有按钮标签类型

    有没有办法使用 javascript 获取特定页面上的所有按钮标签及其类型 将此代码放在文档的加载事件中或 HTML 的底部 var buttons document getElementsByTagName button for let
  • JS 按特定排序顺序排序

    我需要按特定顺序对数据进行排序 如下所示 const sortBy b a c e d const data a d e 我知道如何按升序 降序排序 console log data sort a b gt a gt b a d e con
  • React Router V5 在路由中使用上下文变量的最佳方式

    在我的应用程序中 我定义了路线 如下所示
  • 未记录的 Sheet API 限制问题

    我已经看过人们遇到类似问题的帖子 但找不到明确的答案 我尝试使用以下代码行检索 264735 个插槽的二维数组 var optionalArguments majorDimension ROWS valueRenderOption FORM
  • 如何使用 javascript 创建一个 for 循环,返回一个月中剩余天数的新日期对象数组

    对于给定的日期 我需要返回一个数组 其中包含当月剩余的每一天的日期对象 我需要一个for循环创建new Date 对象设置为该月剩余的每一天 将它们添加到数组并返回该数组 我想出了代码来检索该月的剩余天数 但是由于某种原因我无法弄清楚循环
  • 来自函数参数的动态 Typescript 对象属性

    我有一个函数 它接受一个n参数的数量 并生成一个新对象 其中包含参数到唯一哈希的键值映射 Typescript 有没有办法从函数的参数动态推断返回对象的键 Example 生成字典的CreateActionType函数 function c
  • 运行 gulp 会给出“path.js:7 throw new TypeError('Path must be a string. Received ' +spect(path));”

    在我的 WordPress 项目中我使用Laravel Elixir来处理资产 直到今天一切都正常 现在每次我跑步gulp我越来越 gulp path js 7 throw new TypeError Path must be a stri
  • 使用加权概率和值查找数组中的项目

    上周我正在做的一个简单程序遇到了一些问题 这里有人帮助了我 现在我遇到了另一个问题 我目前有这个代码 var findItem function desiredItem var items item rusty nail probabili
  • HTML 表格换行列

    我有一个表 用户将数据输入到列中 每次用户输入数据时都会创建一个新列 一段时间后 他们有大量的专栏 我需要它们换行 我知道如何将文本换行在列内 但我需要将整个列换行在第一列下方 依此类推 您不应该为此使用表格 您应该使用具有 float l
  • Javascript 中繁重计算的最佳实践?

    我正在处理客户端脚本 需要进行繁重的计算 例如将大量对象推送到数组中 这会导致 JavaScript 停止响应并且浏览器挂起并发出警报 是否有任何最佳实践或设计模式来处理这些计算 我搜索并找到许多不同的方法来处理这些情况 但解决方案很难实现
  • JavaScript 动态变量名称[重复]

    这个问题在这里已经有答案了 好吧 我想在用户单击时创建变量 每次单击都会添加一个新变量 我目前正在使用 jquery 和 javascript 我无法在服务器端执行此操作 这必须在浏览器中完成 newCount document getEl
  • AngularJS ng-重复重新渲染

    我正在使用 AngularJS 构建一个简单的应用程序 应用程序向服务器发出异步 AJAX 调用 服务器返回一个如下所示的数组 paragraphs content content one content cnt two content r
  • 将美元金额动态转换为文本以包含“美元”和“美分”一词

    我需要将输入字段中输入的美元金额动态转换为文本 我能找到的最接近的解决方案几乎可以满足我的需求 但是 我希望结果文本包含 美元 一词 并删除句子末尾带有 美分 的 点 一词 这是起始原型和当前结果 function amountToWord
  • 将 WebApp 授权给 ADFS 以访问 Dynamics CRM Web API

    我有一个 Web 应用程序需要与 Dynamics CRM 365 Web API 通信 Dynamics CRM 配置为 ADFS 上的依赖方 服务器是 Windows Server 2016 一切都在本地 而不是在 Azure 上 我为
  • 窗口位置替换 - 超时帮助? JavaScript问题

    我曾尝试找到一种方法 在我的代码中添加超时 然后再重定向您 我用谷歌搜索并找到了一些帮助 但他们都没有达到我的预期 这会提示用户出生年份并计算年龄 大致 如果用户未满18岁 则带他们去迪士尼乐园 否则允许进入 函数年龄按钮 var AskD
  • JQuery 从 Div 中抓取文本减去子元素[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以从这个 div 中获取文本而不获取任何子元素 div strong Title Text Unwanted strong This is the text I need div 我知道我可
  • 从 Angularjs 应用程序中的 iOS Webview 调用 Javascript 函数

    我的问题是 当我尝试从 UIWebView 中调用 AngularJS 应用程序中存在的 javascript 函数时 该函数无法识别 当我在典型的 html 结构中调用该函数时 该函数会按预期被识别 下面提供的示例 目标 C void v
  • Object.assign 方法不绑定“this”

    我正在尝试绑定this变量到一个新对象 function Parent sub component constructors this components node function this name jordan subcompone

随机推荐