国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Firebase 身份驗證。頁面刷新時 request.auth 為 null
P粉693126115
P粉693126115 2024-02-25 21:55:56
0
2
625

刷新頁面時,客戶端 Firebase 似乎認(rèn)為我有經(jīng)過身份驗證的用戶,但 firestore firebase 規(guī)則暗示我沒有經(jīng)過身份驗證的用戶。

我有一個 Firebase 應(yīng)用程序,用戶通過 signInWithEmailAndPassword 使用電子郵件和密碼登錄。我將持久性設(shè)置為 browserLocalPersistence。通常,當(dāng)用戶登錄時,會使用經(jīng)過身份驗證的用戶對象調(diào)用 onAuthStateChanged 方法,并且應(yīng)用程序可以正常運行。當(dāng)用戶刷新頁面時,我的 onAuthStateChanged 方法會再次使用非空用戶觸發(fā),但由于我的安全規(guī)則,所有 Firebase 查詢都會失敗。我在那里做錯了什么。

這是一個reactjs應(yīng)用程序。如果我可以提供任何其他可能會給您帶來啟發(fā)的答案,請告訴我。

我的 firebase 規(guī)則:

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();
    });
  }
})

P粉693126115
P粉693126115

全部回復(fù)(2)
P粉258788831

我想你忘記了 readwrite 之間的逗號,應(yīng)該看起來像 allow read, write: if isAuthenticated();

P粉854119263

我最終不得不實現(xiàn)一個身份驗證提供程序,以便它保留我的用戶信息。

新文件 AuthContext.tsx

import React from "react"
import { User } from "firebase/auth";

export const AuthContext = React.createContext(null)

新文件 AuthProvider.tsx

import { FC, useEffect, useState } from "react";
import { User } from "firebase/auth";
import { sharedFirebaseAuth } from "../Utils/SharedFirebase";
import { AuthContext } from "./AuthContext";

export interface AuthProviderProps {
    children: JSX.Element;
}

export const AuthProvider: FC = ({ children }: AuthProviderProps) => {
  const [user, setUser] = useState(null);
  
  useEffect(() => {
    const unsubscribe = sharedFirebaseAuth.onAuthStateChanged((firebaseUser) => {
      setUser(firebaseUser);
    });
    return unsubscribe
  }, []);

  return (
    {children}
  );
};

然后我像這樣更新了我的index.tsx

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { AuthProvider } from './provider/AuthProvider';
import "bootstrap/dist/css/bootstrap.min.css";

const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  
    
      
    
  
);

然后將我調(diào)用 onAuthStateChanged 的?? app.tsx 部分更新為以下內(nèi)容

const user = useContext(AuthContext);

    useEffect(() => {
        if(user){
            requestDocs();
        }
    },[user]);

刷新后,它似乎保留了所有必要的身份驗證信息來提取文檔。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板