GeezerVison is showing github.com — fix(site): set external auth provider polling status individually by aqandrew · Pull Request #26313 · coder/coder
Conversation
aqandrew
commented
Jun 11, 2026
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
fixes #22420
ref DEVEX-369
ref DEVEX-269
The bug on CreateWorkspacePage, where clicking one external auth provider login button disabled all providers' login buttons, was caused by providers all sharing a single polling status ("idle" | "polling" | "abandoned") in the useExternalAuth hook.
changes
- Instead of setting one status across all providers, the polling status in
useExternalAuth is now tracked for each provider in a record whose keys are the providers' IDs.
- The biggest diff is a new Storybook file CreateWorkspacePage.stories.tsx which reproduces the bug behavior from the issue.
- Until now we've only had CreateWorkspacePageView.stories.tsx, which isn't able to model the user interactions / API responses needed to verify the bugfix. This file is unchanged.
- Also deletes
CreateWorkspacePage's useExternalAuth hook in favor of the global useExternalAuth hook (see refactor(site): use global useExternalAuth hook for CreateWorkspacePage #26310)
(co-written with Coder Agents)
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
…der external auth
Adds CreateWorkspacePage.stories.tsx with four stories covering the
multi-provider external auth bug described in #22420:
- MultipleExternalAuth: both buttons render enabled
- ClickingOneAuthDoesNotDisableOthers: regression test for #22420
- OneProviderAuthenticated: mixed authenticated/unauthenticated state
- SequentialAuthFlow: full polling flow with mockResolvedValueOnce
The external auth polling state was a single shared value for all
providers. Clicking one provider's Login button set the global state to
"polling", which disabled every other provider's button. Users had to
refresh the page between each authentication.
Change the state from a single ExternalAuthPollingState string to a
Record<string, ExternalAuthPollingState> keyed by provider ID. Each
provider now independently tracks idle, polling, and abandoned states.
The query refetchInterval activates when any provider is polling and
each provider has its own 60-second timeout.
Fixes #22420
… MockTemplateVersionExternalAuthAzure
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Reviewers
aslilac
aslilac approved these changes
jaaydenh
Awaiting requested review from jaaydenh
Uh oh!
There was an error while loading. Please reload this page.
Milestone
No milestone
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.