deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Next.js 15 Supabase auth: sessiz token sızıntıları, getSession() tuzağı ve üç katmanlı çözüm

Dev.to'daki bir rehber, Next.js 15'in async cookie'lerinin ve kullanımdan kaldırılan Supabase helper'larının eski auth boilerplate'ini nasıl bozduğunu, getSession()'ın neden token sahteciliğine davetiye çıkardığını ve üç client'lı çözümü anlatıyor.

Next.js 15 Supabase auth: sessiz token sızıntıları, getSession() tuzağı ve üç katmanlı çözüm

Dev.to'da yayımlanan uygulamalı bir mühendislik yazısı, Next.js 15'teki sunucu tarafı kimlik doğrulama değişikliklerini haritalıyor ve yazarın bugün bir micro-SaaS'ta ve müşteri projelerinde production'da kullandığı üç parçalı Supabase client mimarisini paylaşıyor. Ana uyarı şu: 2023 döneminden tutorial'lardan alınmış kimlik doğrulama kodu çoğu zaman hâlâ çalışır ama sessizce başarısız olur — cache'lenmiş session'ları edge'de sızdırır, token yenileme sırasında kullanıcıları redirect döngülerinde bırakır veya Server Action'lar içinde sahte JWT'leri kabul eder.

Next.js 15'te ne bozuldu

Yazıya göre üç değişiklik eski Supabase kurulumlarını geçersiz kılıyor. Birincisi, next/headers'taki request API'leri — cookies() ve headers() — artık asenkron ve kullanılmadan önce await edilmeleri gerekiyor. İkincisi, React 19 server component'leri salt okunur stream olarak render ediliyor ve cookie'leri hiçbir şekilde değiştiremiyor. Üçüncüsü, Supabase'in eski @supabase/auth-helpers-nextjs paketi kullanımdan kaldırıldı ve yerini @supabase/ssr aldı.

Sonuçlar ölümcül değil ama sinsi, diyor yazar: cookie deposuna senkron olarak dokunan bir helper geliştirme ortamında yalnızca uyarı üretebilir, ama production server action'larında ara sıra 'dynamic server usage' ve cookie değiştirilebilirliği hataları yüzeye çıkabilir.

getSession() tuzağı

Yazıdaki en keskin uyarı supabase.auth.getSession() ile ilgili. Bu çağrı session'ı doğrudan yerel cookie'lerden okur ve token'ı Supabase Auth sunucusuna karşı doğrulamaz; bu yüzden kurcalanmış, süresi geçmiş veya iptal edilmiş bir JWT bile geçerli görünen bir session üretebilir. Yazarın kuralı net: herhangi bir sunucu tarafı erişim kararı için — server component'ler, route handler'lar, middleware, server action'lar — onun yerine getUser() çağırın; bu çağrı token'ı Supabase ile doğrular veya kriptografik imzasını projenin imzalama anahtarına karşı kontrol eder, böylece kullanıcı ID'leri ve claim'ler sahtelenemez.

Middleware yenilemeleri rate limit'leri tüketebilir

Next.js middleware'i eşleşen her istekte çalıştığı için gevşek yazılmış bir matcher, bir sayfanın yüklediği her stylesheet, favicon ve resim için bir Supabase token yenilemesi tetikler. Yazı etkiyi sayısallaştırıyor: 30 varlık çeken bir dashboard, tek bir sayfa görüntülemede 30 auth gidiş-dönüşü üretir ve bu, Supabase API rate limit'lerini dakikalar içinde tüketebilir. Önerilen çözüm, _next/static, _next/image, favicon ve yaygın resim dosya uzantılarını açıkça hariç tutan bir matcher'dır.

Üç client, her birinin tek bir görevi

Yazıda anlatılan mimari, Supabase erişimini üç küçük factory modülüne bölüyor:

  • Tek sorumluluğu, bir istek sayfalara veya server action'lara ulaşmadan önce süresi dolmuş token'ları yenilemek olan bir edge middleware modülü. Kullanıcıyı getUser() ile doğrular, kimliği doğrulanmamış ziyaretçileri /dashboard ve /settings gibi korumalı yollardan orijinal yolu redirectTo query parametresinde saklayarak /login'e yönlendirir ve zaten kimliği doğrulanmış kullanıcıları login ve register ekranlarından uzaklaştırır.
  • Server component'ler için Next.js 15 cookie deposunu await eden ve salt okunur olarak ele alan bir server client. Cookie yazma callback'i yazıları try/catch içine alır ve hataları bilerek yutar; çünkü component'ler cookie'leri değiştiremez ve middleware session'ı zaten yenilemiştir.
  • Etkileşimli client component'ler için bir browser client.

Server action'lar için yazı ek bir koruma daha öneriyor: client payload'larına asla güvenmeyin. Gelen form verisi, kimlik doğrulama ilerlemeden önce Zod şemalarıyla çalışma zamanında kontrol edilir — login örneğinde e-posta biçimi doğrulanır ve minimum parola uzunluğu zorlanır — böylece bozuk girdiler ve yetki yükseltme girişimleri engellenir.

Neden önemli

Next.js 15'in auth sorun noktaları kullanımdan kaldırmalar ve davranış değişiklikleri, gürültülü compile-time hataları değil; bu yüzden bozuk pattern'ler fark edilmeden production'a çıkabilir. Hâlâ erişim kontrolü için getSession() çağıran veya middleware'i her statik varlıkta token yenileyen bir migration ortasındaki her ekip, gerçek bir güvenlik veya güvenilirlik hatası taşıyor. Yazı tek bir ekibin production deneyimi, resmi bir rehber değil ve kod özellikle Supabase için yazılmış — ama temel kurallar (yeni async API'leri await edin, cookie içeriklerine güvenmek yerine token'ları sunucu tarafında doğrulayın ve middleware matcher'larını sıkı tutun) cookie tabanlı session kullanan her Next.js 15 App Router projesi için geçerli.

  • #next-js
  • #supabase
  • #authentication
  • #react-19
  • #server-actions