Local Storage getting cleared randomly, causing user to log out
See original GitHub issueBug report
Describe the bug
Sometimes, the local storage entry for Supabase Auth (supabase.auth.token
) gets cleared, causing the user to be logged out of the application. Local storage keys unrelated to Supabase are unchanged and remain persisted, leading me to believe that this is a Supabase issue.
To Reproduce
I’m not entirely sure how to reproduce this. It happens consistently for me, but I don’t know the cause. Usually, after logging in and waiting for a few days, the local storage entry gets cleared automatically.
You can try the following:
- Implement client-side Supabase Auth
- Log into the application
- Wait some period of time (usually 1-2 days)
- Observe that you are logged out and the local storage entry has been cleared
For details on how I am implementing Supabase Auth, take a look at my public repository.
Expected behavior
supabase.auth.token
should never be cleared unless the user explicitly logs out or clears their cache.
System information
This happens on multiple OS’s and browsers.
- OS: Windows, Android, iOS
- Browser (if applies): Chrome, Safari
- Version of supabase-js: 1.22.5
Additional context
My JWT expiry is 604800
, but I’ve also used 60
before with the same behavior happening. It seems to be unaffected by the JWT expiry value.
This happens both on localhost
and in production.
I’m not sure about the implementation details of Supabase Auth, but what could be happening is that the refreshToken
that I am passing into the signIn
method is expired, so the user gets automatically logged out and the local storage entry is cleared. What should happen is that the token is automatically refreshed, the user stays signed in, and the local storage entry is preserved/updated.
Edit: I’ve noticed this happening sometimes after I deploy. Is there something that changes after each deployment that invalidates the session? I’m using Vercel.
Issue Analytics
- State:
- Created 2 years ago
- Reactions:7
- Comments:20 (4 by maintainers)
Why it takes too long to solve this issue 😦 ?
I don’t know if it will help you because it was pretty specific to my implementation, but here is how I solved it. I am listening to the
person
table which is a table that I created and linked to theusers
table generated by Supabase (it’s just holding more details about the user.) I created a layer of abstraction to listen for changes and return anObservable
that returnsEither
aFailure
or an instance of the retrieved/updatedPerson
. The error I had was when I tried to unsubscribe from the stream when refreshing the page. I had a warning saying that the stream was already closed or something. All I had to do was to remove the call from the return method of the useEffect hook for it to work.My handleSession method :