Back to snippets

nextjs_clerk_auth_layout_and_route_protection_middleware.ts

typescript

This quickstart demonstrates how to integrate Clerk authentication into a Next.js

19d ago41 linesclerk.com
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};