在刷新頁面時,客戶端 Firebase 似乎認為我有經過身份驗證的用戶,但 firestore firebase 規則暗示我沒有經過身份驗證的用戶。
我有一個 Firebase 應用程序,用戶透過 signInWithEmailAndPassword
使用電子郵件和密碼登入。我將持久性設定為 browserLocalPersistence
。通常,當使用者登入時,會使用經過驗證的使用者物件呼叫 onAuthStateChanged
方法,且應用程式可以正常運作。當使用者重新整理頁面時,我的 onAuthStateChanged
方法會再次使用非空白使用者觸發,但由於我的安全性規則,所有 Firebase 查詢都會失敗。我在那裡做錯了什麼。
這是一個reactjs應用程式。如果我可以提供任何其他可能會給您帶來啟發的答案,請告訴我。
我的 firebase 規則:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if isAuthenticated(); } function isAuthenticated() { return request.auth != null && request.auth.uid != null; } } }
我的登入程式碼:
setPersistence(sharedFirebaseAuth, browserLocalPersistence) .then(() => { signInWithEmailAndPassword(sharedFirebaseAuth, email, password) .then((userCredential) => { }) .catch((error) => { }); })
我的 onAuthStateChanged 程式碼
onAuthStateChanged(sharedFirebaseAuth, (user) => { if(user){ user.reload().then(()=>{ requestDocs(); }); } })
我想你忘了
read
和write
之間的逗號,應該看起來像allow read, write: if isAuthenticated();
我最終不得不實現一個身份驗證提供程序,以便它保留我的用戶資訊。
新檔案 AuthContext.tsx
新檔案 AuthProvider.tsx
); };