簡體   English   中英

Firestore:Fetch API 無法加載...由於訪問控制檢查

[英]Firestore: Fetch API cannot load... due to access control checks

在移動設備 safari 上出現此錯誤:

Fetch API cannot load https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel?gsessionid=&database=&RID=&AID&TYPE=xmlhttp&zx=&t=1 due to access control checks.

(我去掉了一些參數值)

該應用程序正在運行,並且該域已在 firestore 設置中列入白名單。 但我還是想解決這個錯誤。

這不是安全規則問題,因為那些會引發特定錯誤。 無論如何,我打開所有文檔進行檢查,但此錯誤仍然存在:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      // This does not fix the issue
      allow read, write: if true;
    }
  }
}

此錯誤的搜索結果通常指cors問題,但對本案例沒有意義。 任何想法贊賞...

"firebase": "^9.10.0"

如果我沒記錯的話,如果用戶沒有登錄就不能使用 firestore,也許你應該在 firestore 中做任何事情之前添加一個登錄用戶。 並在 firestore 規則中添加這個。 [CMIIW]

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
     allow read, write: if request.auth != null;
    }
  }

提到的錯誤似乎是由於 CORS 問題。您還應該檢查是否在服務器端和客戶端都設置了 header Access-Control-Allow-Origin。
同樣如此處所述請嘗試將 Safari 發出的實際請求與完成的成功請求進行比較,以發現可能丟失的標頭(也可能將它們與您的服務器配置進行比較)。
這種實現以前是使用 XMLHttpRequest 實現的。因為“Fetch”提供了一個更好的替代方案,可以很容易地被其他技術(如 Service Workers)使用。 Fetch 還提供了一個單一的邏輯位置來定義其他與 HTTP 相關的概念,例如 CORS 和 HTTP 的擴展。
web的一個核心安全原則是:默認不允許從其他域加載資源,除非服務器明確允許。 錯誤消息也可能出現,因為您正試圖從不同的域中獲取某些內容,而服務器未設置為專門允許它。 閱讀跨源資源共享 (CORS) 以了解更多信息。 通常歸結為在響應中添加 HTTP header Access-Control-Allow-Origin: *。

在此處查看類似示例:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM