diff --git a/demo/nextjs/components/sign-in.tsx b/demo/nextjs/components/sign-in.tsx index 599703a2..56b64573 100644 --- a/demo/nextjs/components/sign-in.tsx +++ b/demo/nextjs/components/sign-in.tsx @@ -124,7 +124,6 @@ export default function SignIn() { onClick={async () => { await signIn.social({ provider: "discord", - callbackURL: "/dashboard", }); }} > diff --git a/packages/better-auth/src/api/routes/sign-in.ts b/packages/better-auth/src/api/routes/sign-in.ts index 73e24253..9e3a6ae8 100644 --- a/packages/better-auth/src/api/routes/sign-in.ts +++ b/packages/better-auth/src/api/routes/sign-in.ts @@ -59,8 +59,7 @@ export const signInOAuth = createAuthEndpoint( : `${currentURL?.origin}${c.body.callbackURL || ""}`; const state = generateState( - callbackURL || currentURL?.origin || c.context.baseURL, - c.query?.currentURL, + callbackURL || currentURL?.origin || c.context.options.baseURL, ); await c.setSignedCookie( cookie.state.name, diff --git a/packages/better-auth/src/plugins/generic-oauth/index.ts b/packages/better-auth/src/plugins/generic-oauth/index.ts index e4ce3077..e1506854 100644 --- a/packages/better-auth/src/plugins/generic-oauth/index.ts +++ b/packages/better-auth/src/plugins/generic-oauth/index.ts @@ -204,8 +204,7 @@ export const genericOAuth = (options: GenericOAuthOptions) => { ? ctx.body.callbackURL : `${currentURL?.origin}${ctx.body.callbackURL || ""}`; const state = generateState( - callbackURL || currentURL?.origin || ctx.context.baseURL, - ctx.query?.currentURL, + callbackURL || currentURL?.origin || ctx.context.options.baseURL, ); const cookie = ctx.context.authCookies; await ctx.setSignedCookie( diff --git a/packages/better-auth/src/utils/state.ts b/packages/better-auth/src/utils/state.ts index e6b615d0..1bb5451c 100644 --- a/packages/better-auth/src/utils/state.ts +++ b/packages/better-auth/src/utils/state.ts @@ -1,13 +1,18 @@ import { generateState as generateStateOAuth } from "oslo/oauth2"; import { z } from "zod"; +import { BetterAuthError } from "../error/better-auth-error"; -export function generateState(callbackURL?: string, currentURL?: string) { +export function generateState(callbackURL?: string) { const code = generateStateOAuth(); const state = JSON.stringify({ code, callbackURL, - currentURL, }); + if (state.length > 4000) { + throw new BetterAuthError( + "State is too long to be safely stored in a cookie. Make sure the callbackURL is not too long.", + ); + } return state; }