Skip to content

@clerk/nextjs@6.0.0

Compare
Choose a tag to compare
@clerk-cookie clerk-cookie released this 23 Oct 00:35
· 52 commits to main since this release
180f5a5

Major Changes

  • Stop <ClerkProvider> from opting applications into dynamic rendering. A new prop, <ClerkProvider dynamic> can be used to opt-in to dynamic rendering and make auth data available during server-side rendering. The RSC auth() helper should be preferred for accessing auth data during dynamic rendering. (#4366) by @jacekradko

  • @clerk/nextjs: Converting auth() and clerkClient() interfaces to be async (#4366) by @jacekradko

    @clerk/upgrade: Adding required codemod for @clerk/nextjs breaking changes

    Migration guide

    auth() is now async

    Previously the auth() method from @clerk/nextjs/server was synchronous.

    import { auth } from "@clerk/nextjs/server";
    
    export function GET() {
      const { userId } = auth();
      return new Response(JSON.stringify({ userId }));
    }

    The auth method now becomes asynchronous. You will need to make the following changes to the snippet above to make it compatible.

    - export function GET() {
    + export async function GET() {
    -   const { userId } = auth();
    +   const { userId } = await auth();
      return new Response(JSON.stringify({ userId }));
    }

    Clerk middleware auth is now async

    import { clerkClient, clerkMiddleware } from '@clerk/nextjs/server';
    import { NextResponse } from 'next/server';
    
    export default clerkMiddleware(async (auth, request) => {
      const resolvedAuth = await auth();
    
      const count = await resolvedAuth.users.getCount();
    
      if (count) {
        return NextResponse.redirect(new URL('/new-url', request.url));
      }
    });
    
    export const config = {
      matcher: [...],
    };

    clerkClient() is now async

    Previously the clerkClient() method from @clerk/nextjs/server was synchronous.

    import { clerkClient, clerkMiddleware } from '@clerk/nextjs/server';
    import { NextResponse } from 'next/server';
    
    export default clerkMiddleware((auth, request) => {
      const client = clerkClient();
    
      const count = await client.users?.getCount();
    
      if (count) {
        return NextResponse.redirect(new URL('/new-url', request.url));
      }
    });
    
    export const config = {
      matcher: [...],
    };

    The method now becomes async. You will need to make the following changes to the snippet above to make it compatible.

    - export default clerkMiddleware((auth, request) => {
    - const client = clerkClient();
    + export default clerkMiddleware(async (auth, request) => {
    + const client = await clerkClient();
      const count = await client.users?.getCount();
    
      if (count) {
    }
  • Support unstable_rethrow inside clerkMiddleware. (#4366) by @jacekradko

    We changed the errors thrown by protect() inside clerkMiddleware in order for unstable_rethrow to recognise them and rethrow them.

  • Removes deprecated APIs: authMiddleware(), redirectToSignIn(), and redirectToSignUp(). See the migration guide to learn how to update your usage. (#4366) by @jacekradko

Minor Changes

Patch Changes