fix: refresh token updates auth headers and sets realtime auth #1171
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR fixes a critical bug where the Supabase client fails to update the Authorization header after the access token is refreshed, which caused privileged requests like
supabase.auth.admin.list_users()to fail with a 403 error.The bug was tracked in #1143.
What Was the Bug?
on_auth_state_change), theAuthorizationheader inclient.options.headerswas not being updated.Authorizationheader, failed.What This Fix Does
_listen_to_auth_events()on bothSyncClientandAsyncClient.auth.on_auth_state_change(...)in the client constructor.SIGNED_IN,TOKEN_REFRESHED, orSIGNED_OUT:Authorizationheader with the new access token.realtime.set_auth(...).Tests Added
I added new unit tests in both sync and async test suites that verify:
Authorizationheader updates correctly after a token refresh.postgrest,storage,functions) are set toNoneso they reinitialize with the correct headers.set_auth(...).Test Files:
tests/_sync/test_auth_refresh_sync.pytests/_async/test_auth_refresh_async.pyAll tests pass.
Closes