Skip to content

Commit 7e7ec9e

Browse files
PierreVieiraclaude
andcommitted
fix: return email_address_not_provided for external provider with no email
The OAuth callback rejected a missing provider email with a generic NewInternalServerError, surfacing as HTTP 500 / unexpected_failure. That masks a non-server fault and leaves clients without a stable way to detect the case (only the human-readable message). Use the already-defined but unused ErrorCodeEmailAddressNotProvided via NewUnprocessableEntityError (422) so clients can handle it explicitly. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 983f59a commit 7e7ec9e

2 files changed

Lines changed: 6 additions & 1 deletion

File tree

internal/api/external.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ func (a *API) internalExternalProviderCallback(w http.ResponseWriter, r *http.Re
173173
userData := data.userData
174174

175175
if len(userData.Emails) == 0 && !emailOptional {
176-
return apierrors.NewInternalServerError("Error getting user email from external provider")
176+
return apierrors.NewUnprocessableEntityError(apierrors.ErrorCodeEmailAddressNotProvided, "Error getting user email from external provider")
177177
}
178178

179179
userData.Metadata.EmailVerified = false

internal/api/external_google_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"net/url"
99

1010
"github.com/stretchr/testify/require"
11+
"github.com/supabase/auth/internal/api/apierrors"
1112
"github.com/supabase/auth/internal/api/provider"
1213
)
1314

@@ -105,6 +106,10 @@ func (ts *ExternalTestSuite) TestSignupExternalGoogleDisableSignupErrorWhenEmpty
105106
u := performAuthorization(ts, "google", code, "")
106107

107108
assertAuthorizationFailure(ts, u, "Error getting user email from external provider", "server_error", "google@example.com")
109+
110+
q, err := url.ParseQuery(u.RawQuery)
111+
ts.Require().NoError(err)
112+
ts.Require().Equal(apierrors.ErrorCodeEmailAddressNotProvided, q.Get("error_code"))
108113
}
109114

110115
func (ts *ExternalTestSuite) TestSignupExternalGoogleDisableSignupSuccessWithPrimaryEmail() {

0 commit comments

Comments
 (0)