diff --git a/apps/web/src/app/join-team/page.tsx b/apps/web/src/app/join-team/page.tsx index 01021f2..928ae66 100644 --- a/apps/web/src/app/join-team/page.tsx +++ b/apps/web/src/app/join-team/page.tsx @@ -4,11 +4,16 @@ import Spinner from "@unsend/ui/src/spinner"; import { getServerAuthSession } from "~/server/auth"; import { redirect } from "next/navigation"; -export default async function CreateTeam() { +export default async function CreateTeam({ + searchParams, +}: { + searchParams: { inviteId?: string }; +}) { const session = await getServerAuthSession(); if (!session) { - redirect("/login"); + const inviteId = searchParams?.inviteId; + redirect(`/login${inviteId ? `?inviteId=${inviteId}` : ""}`); } return ( diff --git a/apps/web/src/app/login/login-page.tsx b/apps/web/src/app/login/login-page.tsx index 5941b05..279e77e 100644 --- a/apps/web/src/app/login/login-page.tsx +++ b/apps/web/src/app/login/login-page.tsx @@ -26,6 +26,7 @@ import { BuiltInProviderType } from "next-auth/providers/index"; import Spinner from "@unsend/ui/src/spinner"; import Link from "next/link"; import { useTheme } from "@unsend/ui"; +import { useSearchParams as useNextSearchParams } from "next/navigation"; const emailSchema = z.object({ email: z @@ -93,9 +94,10 @@ export default function LoginPage({ const email = emailForm.getValues().email; console.log("email", email); + const finalCallbackUrl = inviteId ? `/join-team?inviteId=${inviteId}` : `${callbackUrl}/dashboard`; window.location.href = `/api/auth/callback/email?email=${encodeURIComponent( email.toLowerCase() - )}&token=${values.otp.toLowerCase()}${callbackUrl ? `&callbackUrl=${callbackUrl}/dashboard` : ""}`; + )}&token=${values.otp.toLowerCase()}&callbackUrl=${encodeURIComponent(finalCallbackUrl)}`; } const emailProvider = providers?.find( @@ -104,10 +106,14 @@ export default function LoginPage({ const [submittedProvider, setSubmittedProvider] = useState | null>(null); + + const searchParams = useNextSearchParams(); + const inviteId = searchParams.get("inviteId"); const handleSubmit = (provider: LiteralUnion) => { setSubmittedProvider(provider); - signIn(provider); + const callbackUrl = inviteId ? `/join-team?inviteId=${inviteId}` : "/dashboard"; + signIn(provider, { callbackUrl }); }; const { resolvedTheme } = useTheme(); diff --git a/apps/web/src/server/auth.ts b/apps/web/src/server/auth.ts index 1da07a3..2600488 100644 --- a/apps/web/src/server/auth.ts +++ b/apps/web/src/server/auth.ts @@ -53,6 +53,11 @@ function getProviders() { clientId: env.GITHUB_ID, clientSecret: env.GITHUB_SECRET, allowDangerousEmailAccountLinking: true, + authorization: { + params: { + scope: 'read:user user:email' + } + } }) ); }