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
), theAuthorization
header inclient.options.headers
was not being updated.Authorization
header, failed.What This Fix Does
_listen_to_auth_events()
on bothSyncClient
andAsyncClient
.auth.on_auth_state_change(...)
in the client constructor.SIGNED_IN
,TOKEN_REFRESHED
, orSIGNED_OUT
:Authorization
header with the new access token.realtime.set_auth(...)
.Tests Added
I added new unit tests in both sync and async test suites that verify:
Authorization
header updates correctly after a token refresh.postgrest
,storage
,functions
) are set toNone
so they reinitialize with the correct headers.set_auth(...)
.Test Files:
tests/_sync/test_auth_refresh_sync.py
tests/_async/test_auth_refresh_async.py
All tests pass.
Closes