{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "password-based-auth-react-router", "type": "registry:block", "title": "Password Based Auth flow for React Router and Supabase", "description": "Password Based Auth flow for React Router and Supabase", "dependencies": [ "@supabase/ssr@latest", "@react-router/dev@latest", "@react-router/fs-routes@latest", "@supabase/supabase-js@latest" ], "registryDependencies": [ "button", "card", "input", "label" ], "files": [ { "path": "registry/default/blocks/password-based-auth-react-router/app/routes/auth.confirm.tsx", "content": "import { createClient } from '@/registry/default/clients/react-router/lib/supabase/server'\nimport { type EmailOtpType } from '@supabase/supabase-js'\nimport { type LoaderFunctionArgs, redirect } from 'react-router'\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n const requestUrl = new URL(request.url)\n const token_hash = requestUrl.searchParams.get('token_hash')\n const type = requestUrl.searchParams.get('type') as EmailOtpType | null\n const _next = requestUrl.searchParams.get('next')\n const next = _next?.startsWith('/') ? _next : '/'\n\n if (token_hash && type) {\n const { supabase, headers } = createClient(request)\n const { error } = await supabase.auth.verifyOtp({\n type,\n token_hash,\n })\n if (!error) {\n return redirect(next, { headers })\n } else {\n return redirect(`/auth/error?error=${error?.message}`)\n }\n }\n\n // redirect the user to an error page with some instructions\n return redirect(`/auth/error?error=No token hash or type`)\n}\n", "type": "registry:file", "target": "app/routes/auth.confirm.tsx" }, { "path": "registry/default/blocks/password-based-auth-react-router/app/routes/auth.error.tsx", "content": "import { Card, CardContent, CardHeader, CardTitle } from '@/registry/default/components/ui/card'\nimport { useSearchParams } from 'react-router'\n\nexport default function Page() {\n let [searchParams] = useSearchParams()\n\n return (\n
\n Code error: {searchParams?.get('error')}\n
\n ) : (\nAn unspecified error occurred.
\n )}\n\n If you registered using your email and password, you will receive a password reset\n email.\n
\n{error}
}\n \n{error}
}\n \n\n Hello {data.user.email}\n
\n \n \n \n\n You've successfully signed up. Please check your email to confirm your account\n before signing in.\n
\n{error}
}\n \n{error}
}\n \n