Setting the file. One moment.
Chapter 17 · Clerk React Router Patterns
Subchapter 17.3
references/ssr-auth.mdMarkdown1 KBView on GitHub
Also bundled
Evalsimport { getAuth } from '@clerk/react-router/server'
import { clerkClient } from '@clerk/react-router/server'
export async function loader(args: Route.LoaderArgs) {
const { userId } = await getAuth(args)
if (!userId) throw redirect('/sign-in')
const client = clerkClient(args)
const user = await client.users.getUser(userId)
return {
firstName: user.firstName,
imageUrl: user.imageUrl,
}
}
export default function Dashboard({ loaderData }: Route.ComponentProps) {
return <h1>Hello {loaderData.firstName}</h1>
}useAuth (client) | getAuth (server) | |
|---|---|---|
| Where | Components, hooks | Loaders, actions |
| Returns | Sync reactive state | Async auth object |
| Import | @clerk/react-router | @clerk/react-router/server |
export async function loader(args: Route.LoaderArgs) {
const auth = await getAuth(args)
const token = await auth.getToken({ template: 'supabase' })
const data = await fetchFromSupabase(token)
return { data }
}export async function loader(args: Route.LoaderArgs) {
const { sessionClaims, userId } = await getAuth(args)
const role = sessionClaims?.metadata?.role
if (role !== 'admin') throw new Response('Forbidden', { status: 403 })
return { adminData: await fetchAdminData() }
}