fix: correct error redirect URL construction (#7799)

This commit is contained in:
Taesu
2026-02-04 22:51:53 +00:00
committed by GitHub
parent b6fbe93a95
commit 4fe3731847
4 changed files with 14 additions and 18 deletions
@@ -10,7 +10,7 @@ import type {
} from "../oidc-provider/types";
function redirectErrorURL(url: string, error: string, description: string) {
return `${
return `${url}${
url.includes("?") ? "&" : "?"
}error=${error}&error_description=${description}`;
}
@@ -7,7 +7,7 @@ import type { AuthorizationQuery, OIDCOptions } from "./types";
import { parsePrompt } from "./utils/prompt";
function formatErrorURL(url: string, error: string, description: string) {
return `${
return `${url}${
url.includes("?") ? "&" : "?"
}error=${error}&error_description=${description}`;
}
+1 -3
View File
@@ -505,9 +505,7 @@ describe("SSO disable implicit sign in", async () => {
"redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fsso%2Fcallback%2Ftest",
);
const { callbackURL } = await simulateOAuthFlow(res.url, headers);
expect(callbackURL).toContain(
"/api/auth/error/error?error=signup disabled",
);
expect(callbackURL).toContain("/api/auth/error?error=signup disabled");
});
it("should create user with SSO provider when sign ups are disabled but sign up is requested", async () => {
+11 -13
View File
@@ -1467,7 +1467,7 @@ export const callbackSSO = (options?: SSOOptions) => {
throw ctx.redirect(
`${
errorURL || callbackURL
}/error?error=invalid_provider&error_description=provider not found`,
}?error=invalid_provider&error_description=provider not found`,
);
}
@@ -1486,7 +1486,7 @@ export const callbackSSO = (options?: SSOOptions) => {
throw ctx.redirect(
`${
errorURL || callbackURL
}/error?error=invalid_provider&error_description=provider not found`,
}?error=invalid_provider&error_description=provider not found`,
);
}
@@ -1513,7 +1513,7 @@ export const callbackSSO = (options?: SSOOptions) => {
throw ctx.redirect(
`${
errorURL || callbackURL
}/error?error=invalid_provider&error_description=token_endpoint_not_found`,
}?error=invalid_provider&error_description=token_endpoint_not_found`,
);
}
@@ -1544,7 +1544,7 @@ export const callbackSSO = (options?: SSOOptions) => {
throw ctx.redirect(
`${
errorURL || callbackURL
}/error?error=invalid_provider&error_description=token_response_not_found`,
}?error=invalid_provider&error_description=token_response_not_found`,
);
}
let userInfo: {
@@ -1561,7 +1561,7 @@ export const callbackSSO = (options?: SSOOptions) => {
throw ctx.redirect(
`${
errorURL || callbackURL
}/error?error=invalid_provider&error_description=jwks_endpoint_not_found`,
}?error=invalid_provider&error_description=jwks_endpoint_not_found`,
);
}
const verified = await validateToken(
@@ -1575,14 +1575,14 @@ export const callbackSSO = (options?: SSOOptions) => {
throw ctx.redirect(
`${
errorURL || callbackURL
}/error?error=invalid_provider&error_description=token_not_verified`,
}?error=invalid_provider&error_description=token_not_verified`,
);
}
if (verified.payload.iss !== provider.issuer) {
throw ctx.redirect(
`${
errorURL || callbackURL
}/error?error=invalid_provider&error_description=issuer_mismatch`,
}?error=invalid_provider&error_description=issuer_mismatch`,
);
}
@@ -1615,7 +1615,7 @@ export const callbackSSO = (options?: SSOOptions) => {
throw ctx.redirect(
`${
errorURL || callbackURL
}/error?error=invalid_provider&error_description=user_info_endpoint_not_found`,
}?error=invalid_provider&error_description=user_info_endpoint_not_found`,
);
}
const userInfoResponse = await betterFetch<{
@@ -1633,7 +1633,7 @@ export const callbackSSO = (options?: SSOOptions) => {
throw ctx.redirect(
`${
errorURL || callbackURL
}/error?error=invalid_provider&error_description=${
}?error=invalid_provider&error_description=${
userInfoResponse.error.message
}`,
);
@@ -1645,7 +1645,7 @@ export const callbackSSO = (options?: SSOOptions) => {
throw ctx.redirect(
`${
errorURL || callbackURL
}/error?error=invalid_provider&error_description=missing_user_info`,
}?error=invalid_provider&error_description=missing_user_info`,
);
}
const isTrustedProvider =
@@ -1679,9 +1679,7 @@ export const callbackSSO = (options?: SSOOptions) => {
isTrustedProvider,
});
if (linked.error) {
throw ctx.redirect(
`${errorURL || callbackURL}/error?error=${linked.error}`,
);
throw ctx.redirect(`${errorURL || callbackURL}?error=${linked.error}`);
}
const { session, user } = linked.data!;