clerk-tanstack-patterns

โดย clerk

รูปแบบการตรวจสอบสิทธิ์ TanStack React Start ด้วย @clerk/tanstack-react-start

npx skills add https://github.com/clerk/skills --skill clerk-tanstack-patterns

TanStack React Start Patterns

What Do You Need?

TaskReference
Protect routes with beforeLoadreferences/router-guards.md
Auth in createServerFnreferences/server-functions.md
Pass auth to loadersreferences/loaders.md
Configure Vite + Clerk middlewarereferences/server-setup.md

References

ReferenceDescription
references/router-guards.mdbeforeLoad auth redirect
references/server-functions.mdcreateServerFn with auth()
references/loaders.mdAuth context in loaders
references/server-setup.mdVite and request middleware setup

Setup

npm install @clerk/tanstack-react-start

.env:

VITE_CLERK_PUBLISHABLE_KEY=pk_...
CLERK_SECRET_KEY=sk_...

src/start.ts (request middleware):

import { clerkMiddleware } from '@clerk/tanstack-react-start/server'
import { createCsrfMiddleware, createStart } from '@tanstack/react-start'

const csrfMiddleware = createCsrfMiddleware({
  filter: (ctx) => ctx.handlerType === 'serverFn',
})

export const startInstance = createStart(() => {
  return {
    requestMiddleware: [csrfMiddleware, clerkMiddleware()],
  }
})

src/routes/__root.tsx — wrap with <ClerkProvider>:

import { ClerkProvider } from '@clerk/tanstack-react-start'

function RootDocument({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <body>
        <ClerkProvider>{children}</ClerkProvider>
      </body>
    </html>
  )
}

Mental Model

TanStack Start uses the tanstackStart() Vite plugin. Register CSRF protection before Clerk request middleware in src/start.ts; auth then flows through two layers:

  1. Server layer — createServerFn + auth() from @clerk/tanstack-react-start/server
  2. Router layer — beforeLoad on route definitions, throws redirect for unauthenticated

Both layers are server-executed. Client hooks (useAuth, useUser) are React hooks for the browser side.

Minimal Pattern

import { 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(),
})

Common Pitfalls

SymptomCauseFix
auth() throws "without configuring the middleware"Missing clerkMiddleware in start.tsAdd it after CSRF middleware in requestMiddleware
redirect not thrownUsing return instead of throwthrow redirect(...) in TanStack
Wrong import for authMixing client/server importsServer: @clerk/tanstack-react-start/server
Loader context missing userIdNot passing from beforeLoadReturn from beforeLoad, access via context
ClerkProvider missingForgot root wrappingAdd to __root.tsx shell component

See Also

  • clerk-setup - Initial Clerk install
  • clerk-custom-ui - Custom flows & appearance
  • clerk-orgs - B2B organizations

Docs

TanStack React Start SDK

Skills เพิ่มเติมจาก clerk

clerk-testing
clerk
ยูทิลิตี้สำหรับการทดสอบ E2E สำหรับโฟลว์การตรวจสอบสิทธิ์ของ Clerk ใน Playwright และ Cypress รองรับทั้งเฟรมเวิร์ก Playwright และ Cypress พร้อมรูปแบบการตั้งค่าเฉพาะเฟรมเวิร์ก (globalSetup สำหรับ Playwright, คำสั่งที่กำหนดเองสำหรับ Cypress) มียูทิลิตี้ clerkSetup() และ setupClerkTestingToken() เพื่อเริ่มต้นสภาพแวดล้อมการทดสอบและหลีกเลี่ยงการตรวจจับบอท รวมถึงการคงสถานะ storageState เพื่อนำเซสชันที่ตรวจสอบสิทธิ์แล้วกลับมาใช้ใหม่ในการทดสอบ ลดระยะเวลาการดำเนินการทดสอบ ต้องใช้คีย์ API สำหรับทดสอบ ( pk_test_* ,...
clerk-swift
clerk
การตรวจสอบสิทธิ์แบบเนทีฟ Swift/iOS โดยใช้ ClerkKit พร้อมโฟลว์การตรวจสอบสิทธิ์ที่สร้างไว้ล่วงหน้าหรือแบบกำหนดเอง รองรับโหมดการใช้งานสองแบบ: คอมโพเนนต์ AuthView ที่สร้างไว้ล่วงหน้าหรือโฟลว์เนทีฟแบบกำหนดเองทั้งหมด โดยเลือกตามความต้องการของโปรเจกต์ ต้องเชื่อมต่อคีย์สาธารณะ Clerk ที่ถูกต้องโดยตรงในการกำหนดค่าแอป ไม่ใช้ plist หรือไฟล์สภาพแวดล้อมทางอ้อมตามค่าเริ่มต้น จำเป็นต้องเรียก /v1/environment หลังจากติดตั้งแพ็กเกจเพื่อตรวจสอบความพร้อมใช้งานของคุณสมบัติ (เช่น การรองรับ Apple Sign In) ตาม...
mosaic
clerk
Work on Mosaic UI: styling a component with slot recipes (`defineSlotRecipe` / `useRecipe` / slots / variants), or building a flow — authoring a state machine…
clerk-billing
clerk
Clerk Billing สำหรับการจัดการการสมัครสมาชิก - แสดง PricingTable ของ Clerk
clerk-nextjs-patterns
clerk
รูปแบบ Next.js ขั้นสูงสำหรับการตรวจสอบสิทธิ์ มิดเดิลแวร์ Server Actions และการแคชตามขอบเขตผู้ใช้ด้วย Clerk แยกความแตกต่างระหว่าง auth() แบบฝั่งเซิร์ฟเวอร์ที่รอคอยผลลัพธ์กับ useAuth() hook ฝั่งไคลเอ็นต์ การผสมกันเป็นข้อผิดพลาดที่พบบ่อย ครอบคลุมกลยุทธ์มิดเดิลแวร์ (สาธารณะก่อนเทียบกับป้องกันก่อน) การป้องกันเส้นทาง API และรหัสสถานะ HTTP ที่เหมาะสม (401 เทียบกับ 403) รวมถึงรูปแบบการแคชตามขอบเขตผู้ใช้ด้วย unstable_cache และการป้องกัน Server Actions จากการกลายพันธุ์ที่ไม่ได้รับอนุญาต ให้ความเข้ากันได้กับ Core 2...
clerk-expo-patterns
clerk
รูปแบบ Expo / React Native กับ Clerk — แคชโทเค็น SecureStore, OAuth
changesets
clerk
Create or refresh a `.changeset/<slug>.md` for the current branch, or report that none is required. Triggers on "/changesets create", "add a changeset",…
clerk-astro-patterns
clerk
รูปแบบ Astro กับ Clerk — มิดเดิลแวร์, หน้า SSR, คอมโพเนนต์ไอส์แลนด์