-
Notifications
You must be signed in to change notification settings - Fork 407
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Permission error when accessing a cached firestore collection after logout/login #485
Comments
I've also encountered this issue, thanks for pointing me in the right direction for a workaround @bmcbarron ! |
I stumbled upon that issue too, also thanks from my side! Here's what the solution looks like in Reactfire 4.2.1 const { data: user } = useUser();
const firestore = useFirestore();
const categoriesCollection = collection(firestore, Inventory.getCategoriesPath(user.uid));
const categoriesQuery = query(categoriesCollection, orderBy('id', 'asc'));
const { data: categories } = useFirestoreCollectionData(categoriesQuery, {
// @ts-ignore
idField: `id-${user.stsTokenManager.expirationTime}`,
}); |
Thanks that fixed the problem for me as well. |
I think this is the same issue as described in this discussion: #228 . Another workaround, as mentioned here, is to clear the preloaded observables cache. I'm kind of leaning toward that workaround, although none of them seems particularly good. FWIW I don't see this issue with Google auth, only with email/password. The difference may be that I'm using |
Version info
React: 17.0.2
Firebase: 9.4.0
ReactFire: 4.2.0
Other (e.g. Node, browser, operating system) (if applicable): Chrome, Windows 10
Test case
Test cases seem challenging to produce since a firebase instance is involved.
Steps to reproduce
GoogleAuthProvider
), or be already signed-in.Expected behavior
The same data is read.
Actual behavior
Uncaught FirebaseError: Missing or insufficient permissions.
is thrown.This seems to be caused by the global cache of collections. The problem can be mitigated by:
idField
passed touseFirestoreCollectionData
. Any easy way to test this is to useid-${auth.stsTokenManager.expirationTime}
as youridField
, sinceexpirationTime
changes on every Sign Out/In cycle.Note that waiting more than 30 seconds does not fix the problem. So, the cache resetting of the collection is insufficient to resolve the issue. I suspect that the collection is associated with the stale auth token which has been disabled due to logout.
A possible resolution might be to purge the cache on sign out.
The text was updated successfully, but these errors were encountered: