Loading...
Loading...
TanStack React Start auth patterns with @clerk/tanstack-react-start - createServerFn, beforeLoad guards, loaders, Vinxi server. Triggers on: TanStack auth, createServerFn clerk, beforeLoad protection, TanStack Start middleware.
npx skill4agent add clerk/skills clerk-tanstack-patterns| Task | Reference |
|---|---|
| Protect routes with beforeLoad | references/router-guards.md |
| Auth in createServerFn | references/server-functions.md |
| Pass auth to loaders | references/loaders.md |
| Configure Vinxi + clerkMiddleware | references/vinxi-server.md |
| Reference | Description |
|---|---|
| beforeLoad auth redirect |
| createServerFn with auth() |
| Auth context in loaders |
| clerkMiddleware() setup |
npm install @clerk/tanstack-react-start.envCLERK_PUBLISHABLE_KEY=pk_...
CLERK_SECRET_KEY=sk_...src/start.tsimport { clerkMiddleware } from '@clerk/tanstack-react-start/server'
import { createStart } from '@tanstack/react-start'
export const startInstance = createStart(() => {
return {
requestMiddleware: [clerkMiddleware()],
}
})src/routes/__root.tsx<ClerkProvider>import { ClerkProvider } from '@clerk/tanstack-react-start'
function RootDocument({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
<ClerkProvider>
{children}
</ClerkProvider>
</body>
</html>
)
}createServerFnauth()@clerk/tanstack-react-start/serverbeforeLoadredirectuseAuthuseUserimport { createFileRoute, redirect } from '@tanstack/react-router'
import { createServerFn } from '@tanstack/react-start'
import { auth } from '@clerk/tanstack-react-start/server'
const authStateFn = createServerFn().handler(async () => {
const { isAuthenticated, userId } = await auth()
if (!isAuthenticated) {
throw redirect({ to: '/sign-in' })
}
return { userId }
})
export const Route = createFileRoute('/dashboard')({
beforeLoad: async () => await authStateFn(),
})| Symptom | Cause | Fix |
|---|---|---|
| Missing | Add to |
| Using | |
Wrong import for | Mixing client/server imports | Server: |
| Loader context missing userId | Not passing from beforeLoad | Return from beforeLoad, access via |
| Forgot root wrapping | Add to |
clerk-setupclerk-custom-uiclerk-orgs