I have a counter in my react front-end that I want to display a document value from my firestore database. However, I can't seem to access the firestore data, the code below results in the following error:
import { db, app, functions } from "./firebase";
import { getFunctions, httpsCallable } from "firebase/functions";
import { Link } from "react-router-dom";
import "../App.css";
import React, { useState } from "react";
import {
getFirestore,
collection,
doc,
getDocs,
onSnapshot,
getDocFromCache,
} from "firebase/firestore";
async function checker() {
const querySnap = await getDocs(collection(db, "Count")); //Count is collections name
querySnap.forEach((doc) => {
console.log(doc.id, " => ", doc.data());
});
}
Navbar.js:28 Uncaught (in promise) FirebaseError: Missing or insufficient permissions.
I haven't implemented any firebase auth (although feels like I will need to implement before deploying), and I have tried adjusting my firestore rules (shown below, although I know they are too vulnerable).
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
Would appreciate any and all advice, I am still new to firebase.
Here is my config file if that is helpful?
import { initializeApp } from 'firebase/app';
import { getFunctions, connectFunctionsEmulator } from 'firebase/functions';
import { getAnalytics } from "firebase/analytics";
import { getFirestore, collection, getDocs } from 'firebase/firestore';
import {getAuth} from "firebase/auth";
const firebaseConfig = {
apiKey: //Hiding my data for this post
authDomain:
projectId:
storageBucket:
messagingSenderId:
appId:
measurementId:
};
const app = initializeApp(firebaseConfig);
export const functions = getFunctions(app);
export const db = getFirestore(app);
export const analytics = getAnalytics(app);
export default {app, db, analytics, functions};
Based on your preferred requirements, I would suggest using custom security rules(data validation) if you want to use specific rules in accessing a specific document/collection.
You can check the sample Firestore rules below wherein it does not require authentication as long as the collection matches the value of the field.
service cloud.firestore {
match /databases/{database}/documents {
// Allow the user to read data if the document has the 'visibility'
// field set to 'public'
match /cities/{city} {
allow read: if resource.data.visibility == 'public';
}
}
}
Let me know if you have questions or clarifications.