-1

我正在开发一个带有 Angular 前端、MySQL 和 Flask 后端的仪表板。我已将数据库部署在 CloudSQL 上,并将 Flask 后端部署在 GCP Cloud Run 上。在我的本地计算机上生产期间,我遇到了这个错误:

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

我通过在本地将以下代码添加到我的烧瓶后端来修复它:

from flask_cors import CORS
CORS(app, resources={r"*": {"origins": "*"}})

在烧瓶上的每个功能之前,我还尝试了以下代码,它似乎在本地计算机上完美运行:

from flask_cors import cross_origin
@app.route('/api/register_smartbox', methods=['POST'])
@cross_origin()
def register_smartbox():
    recv_req = request.get_json()

当我将它部署到 GCP Cloud 运行时,出现了主要问题。我在那里使用经过身份验证的调用。以下是我在 Angular 应用程序中从浏览器发送 API 请求时在云运行日志中获得的日志:

警告 2022-02-24T06:14:41.430198ZOPTIONS4030 B0 msChrome 98 https://<My_URL>.app/api/login_users 请求未通过身份验证。允许未经身份验证的调用或设置正确的 Authorization 标头。在https://cloud.google.com/run/docs/securing/authenticating阅读更多信息 可以在以下位置找到其他故障排除文档:https ://cloud.google.com/run/docs/troubleshooting#unauthorized-client

这是我在浏览器中遇到的错误

从源“http://127.0.0.1:5555”访问“https://<My_URL>.app/api/login_users”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

到目前为止我尝试过的事情:

  1. 在 Flask 中添加了所有可能的 CORS 技术
  2. 在 Cloud Run 上部署后,使用 POSTMAN 和 python 请求检查了我的 API,它似乎运行良好
  3. 尝试构建我的 Angular 应用程序的生产版本,以检查那一侧是否存在问题。还包括“凭据”标题:
  const headers = {"Content-Type": "application/json",
  'Authorization': this.auth_tok, "credentials": 'include'}
  1. 尝试使用 CURL 和 NodeJS 部署的 GCP 服务。也和他们一起工作。因此,只有 Angular 应用程序上的浏览器会出现问题。

我已经被这个问题困扰了好几天了。任何形式的帮助将不胜感激。谢谢

4

1 回答 1

0

Authenticated invocations won't work for the CORs requests as your web browser isn't sending the needed auth tokens while it does preflight requests to your service.

于 2022-02-24T17:15:26.320 回答