You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 14.1集成Supabase Auth遇请求速率限制错误求助

Next.js 14.1 + Supabase Auth 请求限流问题

我用Next.js 14.1开发基于Supabase的项目,采用Supabase Auth存储会话和Cookie。本地开发时,执行pnpm dev启动项目或按CTRL+S保存代码后,终端频繁抛出以下错误日志:

AuthApiError: Request rate limit reached
at handleError (webpack-internal:///(rsc)/./node_modules/.pnpm/@supabase+auth-js@2.68.0/node_modules/@supabase/auth-js/dist/module/lib/fetch.js:67:11)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async _handleRequest (webpack-internal:///(rsc)/./node_modules/.pnpm/@supabase+auth-js@2.68.0/node_modules/@supabase/auth-js/dist/module/lib/fetch.js:117:9)
at async _request (webpack-internal:///(rsc)/./node_modules/.pnpm/@supabase+auth-js@2.68.0/node_modules/@supabase/auth-js/dist/module/lib/fetch.js:97:18)
at async eval (webpack-internal:///(rsc)/./node_modules/.pnpm/@supabase+auth-js@2.68.0/node_modules/@supabase/auth-js/dist/module/GoTrueClient.js:1650:24)
at async eval (webpack-internal:///(rsc)/./node_modules/.pnpm/@supabase+auth-js@2.68.0/node_modules/@supabase/auth-js/dist/module/lib/helpers.js:198:36)
{__isAuthError: true, status: 429,code: 'over_request_rate_limit'}

这个错误会导致浏览器会话终止、Cookie失效,必须重新登录。通常首次启动本地项目时触发,也可能在运行数小时后出现。错误发生时,Supabase Auth会出现大量重复调用。

我怀疑问题出在中间件逻辑里,项目根目录middleware.ts代码如下:

import { type NextRequest } from "next/server";
import { updateSession } from "@/utils/supabase/middleware";

export async function middleware(request: NextRequest) {
  return await updateSession(request);
}

export const config = {
  matcher: [
    "/rentscape/:path*",
    "/manage/:slug/:path*",
    "/tenant/:path*",
  ],
};

/utils/supabase/middleware.ts路径下的代码:

import { type CookieOptions, createServerClient } from "@supabase/ssr";
import { type NextRequest, NextResponse } from "next/server";

export const createClient = (request: NextRequest) => {
  // Create an unmodified response
  let response = NextResponse.next({
    request: {
      headers: request.headers,
    },
  });

  const supabase = createServerClient(
    process.env.NEXT_PUBLIC_SUPABASE_URL!,
    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
    {
      cookies: {
        get(name: string) {
          return request.cookies.get(name)?.value;
        },
        set(name: string, value: string, options: CookieOptions) {
          // If the cookie is updated, update the cookies for the request and response
          request.cookies.set({
            name,
            value,
            ...options,
          });
          response = NextResponse.next({
            request: {
              headers: request.headers,
            },
          });
          response.cookies.set({
            name,
            value,
            ...options,
          });
        },
        remove(name: string, options: CookieOptions) {
          // If the cookie is removed, update the cookies for the request and response
          request.cookies.set({
            name,
            value: "",
            ...options,
          });
          response = NextResponse.next({
            request: {
              headers: request.headers,
            },
          });
          response.cookies.set({
            name,
            value: "",
            ...options,
          });
        },
      },
    },
  );

  return { supabase, response };
};

export const updateSession = async (request: NextRequest) => {
  try {
    const { supabase, response } = createClient(request);

    // Only ensures the session is valid, refreshes if expired.
    await supabase.auth.getSession();

    return response;
  } catch (e) {
    return NextResponse.next({
      request: {
        headers: request.headers,
      },
    });
  }
};

我已经尝试过注释updateSession调用、移除根目录中间件的逻辑、让中间件直接返回空响应,但问题仍然没有解决。

内容的提问来源于stack exchange,提问作者Gaston Jacinto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:45:11