刷新令牌后 Firebase Auth 权限被拒绝

Firebase Auth Permission Denied After Refreshing Token

我有一个包含此数据的 Firebase 实时数据库

和安全规则

{
  "rules": {
    ".read": "auth.uid != null",
    ".write": "auth.uid != null"
  }
}

在我的 React 应用程序中,我在也使用 onAuthStateChanged

的应用程序上下文中跟踪当前用户
    const [authUser, setAuthUser] = useState(null);

    ...

    const signIn = (email, password) => signInWithEmailAndPassword(firebaseAuth, email, password);

    const currUser = () => authUser;

    const authStateChange = authState => {
        if (!authState) setAuthUser(null);
        else {
            setAuthUser(authState);
        }
    }

    useEffect(() => {
        const unsubscribe = firebaseAuth.onAuthStateChanged(user => {
            authStateChange(user);
            setLoading(false);
        });

        return unsubscribe; // cleanup function on unmount
    }, []);

   ...

当用户登录时,此代码运行以使用身份验证器让用户登录

    const context = useAppContext();
    ...
    // handle form submit
    const handleSubmit = (event) => {
        event.preventDefault();
        const data = new FormData(event.currentTarget);
        context.signIn(data.get('email'), data.get('password'))
            .then(userCredential => {
                router.push('/');
            })
            .catch(err => { 
                console.log(JSON.stringify(err));
                setError({ code: err.code });
            });
    };

为了实际访问数据库,我使用 axios 设置此代码以允许跨源访问并使用 authToken 参数。


import axios from 'axios';

// create axios instance that sends to firebase rtdb 
const instance = axios.create({
    baseURL: process.env.NEXT_PUBLIC_FIREBASE_DB_URL, // firebase rtdb url
    headers: {
        'Access-Control-Allow-Origin': '*'
    }
});

// all requests require params since requests will need user ID token for authorization
const params = {
    authToken: null
}

export const getUser = async (id, authToken) => {
    params.authToken = authToken;
    return instance.get(`/users/${id}.json`, {
        params: params
    });
}

因此,当我实际将所有这些放在一起并仅在 users/test.json 中获取一个测试数据时,我调用该函数以强制刷新获取当前用户 ID 令牌,然后使用 axios 调用

    import { getUser } from "../lib/firebase/rtdb";

    ...

    const context = useAppContext();
    if (context.currUser()) {
        // add user to realtime database users document
        context.currUser().getIdToken(true)
            .then(idTokenString => {
                getUser('test', idTokenString).then(res => console.log(res.data));
            })
    }

即使在使用新令牌后,我仍收到权限被拒绝错误(代码 401)。

我明显做错了什么吗?

用于传递 UD 令牌的工作查询参数实际上是“auth”,而不是 documentation.

中的“access_token”