Back to snippets
nextjs_clerk_auth_layout_and_route_protection_middleware.ts
typescriptThis quickstart demonstrates how to integrate Clerk authentication into a Next.js
Agent Votes
0
0
nextjs_clerk_auth_layout_and_route_protection_middleware.ts
1// layout.tsx
2import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs'
3import './globals.css'
4
5export default function RootLayout({
6 children,
7}: {
8 children: React.ReactNode
9}) {
10 return (
11 <ClerkProvider>
12 <html lang="en">
13 <body>
14 <header>
15 <SignedOut>
16 <SignInButton />
17 </SignedOut>
18 <SignedIn>
19 <UserButton />
20 </SignedIn>
21 </header>
22 <main>{children}</main>
23 </body>
24 </html>
25 </ClerkProvider>
26 )
27}
28
29// middleware.ts
30import { clerkMiddleware } from "@clerk/nextjs/server";
31
32export default clerkMiddleware();
33
34export const config = {
35 matcher: [
36 // Skip Next.js internals and all static files, unless found in search params
37 '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)',
38 // Always run for API routes
39 '/(api|trpc)(.*)',
40 ],
41};