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
相关产品推荐
相关产品推荐

