Türkçe
  • nextjs
  • app-router
  • server-actions
  • edge

Next.js için Server Actions kullanarak durumsuz oturum uygulama

Next.js'in yeni özelliği olan Server Actions'ı kullanarak çerez tabanlı durumsuz bir oturum uygulaması yapma ve Server Actions'ın avantajlarını deneyimleme.

Sijie
Sijie
Developer

Giriş

Büyük beğeni toplayan App Router sürümünün ardından Next.js, başka bir özellik olan Server Actions ile karşımıza çıkıyor. Bu yeni yenilik, sunucu tarafında veri manipülasyonlarını kolaylaştırıyor, istemci tarafı JavaScript'e olan bağımlılığı azaltıyor ve formları aşamalı olarak geliştiriyor. Tüm bunlar, geleneksel REST API'lerine ihtiyaç duymadan JavaScript ve React kullanarak sağlam web uygulamaları oluşturmanıza olanak tanıyor.

Bu makalede, bu yeniliğin sunduğu avantajlardan yararlanarak, Next.js için çerez tabanlı durumsuz oturum uygulayacağız. Bu yazı, App Router kullanarak bir demo projesi oluşturmanın her aşamasını adım adım anlatan bir rehber niteliğindedir.

Pratik gösterimimiz, Edge Runtime kullanarak Vercel'e kolayca dağıtılabilir. Tam kaynak kodunu GitHub üzerinden indirebilirsiniz.

REST API'lerden uzaklaşmak

Geleneksel olarak, eğer bir Next.js web uygulaması yapıp arka planda veritabanına sorgular göndermek istiyorsak, bazı REST API'ler oluşturup kimlik doğrulama durumunu doğrular ve veritabanını sorgularız, ardından ön uç React uygulaması bu API'leri çağırır. Ancak, eğer API'yi halka açma gereği yoksa ve bu React uygulaması tek istemci ise, API'leri sadece kendimiz çağıracağımızdan, REST API'leri kullanmak gereksiz görünebilir.

Server Actions ile birlikte, React bileşeni artık sunucu tarafı kod çalıştırabilir. Elle bir API uç noktası oluşturmak zorunda kalmadan, Server Actions, Next.js'in arka planda kullanması için otomatik olarak bir uç nokta oluşturur. Bir Server Action çağırıldığında, Next.js, üzerinde bulunduğunuz sayfaya çalıştırılacak olan eylemin meta verileriyle bir POST isteği gönderir.

Durumsuz oturum ihtiyacı

Durumsuz uygulamalar oluşturmak için tercih edilen bir framework olan Next.js genellikle sunucusuzluğu ifade eder, bu durumda oturum verilerini depolamak için belleği kullanamayız. Geleneksel oturumlar, Redis veya bir veritabanı gibi harici bir depolama hizmetinin kullanılmasını gerektirir.

Ancak, oturum verileri yeterince küçük kaldığında, güvenli şifreleme yöntemleri ve istemci tarafında saklanan çerezleri kullanarak durumsuz bir oturum geliştirmek gibi alternatif bir yola sahibiz. Bu yöntem, harici depolama gereksinimini ortadan kaldırır ve oturum verilerini merkezi olmayan bir şekilde tutarak sunucu yükü ve genel uygulama performansı açısından önemli faydalar sağlar.

Hedefimiz, istemci tarafı saklama kapasitesinden yararlanırken iyi yürütülen bir şifreleme yoluyla güvenliği sağlayan, hafif ve etkili bir durumsuz oturum yaratmaktır.

Temel oturum uygulaması

İlk olarak, yeni bir proje başlatmamız gerekiyor:

Kurulum hakkında daha fazla ayrıntı için resmi kılavuza başvurabilirsiniz.

Oturum kütüphanesi oluşturma

Server Actions'ın anlaşılmasını kolaylaştırmak için önce oturumun basit bir versiyonunu oluşturacağız. Bu versiyonda, oturum verilerini çerezlerde saklamak için JSON'u kullanacağız.

session/index.ts adında bir dosya oluşturun ve aşağıdaki kodu ekleyin:

İlk satırdaki "use server" bu dosyanın işlevlerini Server Actions olarak işaretler.

request ve response'a doğrudan erişemediğimiz için çerezleri okumak ve yazmak için next/headers kullanıyoruz. Bu yalnızca Server Actions'da kullanılabilir.

Geliyor: iki Server Action daha

Oturum kütüphanesi hazır olduğuna göre, oturumun kullanılabilirliğini göstermek için bir oturum açma ve oturum kapatma özelliği uygulama zamanı.

user/index.ts dosyasına aşağıdaki kodu ekleyin:

Burada, sadece bir kullanıcı adının gerekli olduğu 'sahte' bir oturum açma süreci kullanıyoruz.

Sayfayı oluşturma

App Router'da sayfa genellikle asenkron bir bileşendir ve Server Actions bir bileşenden doğrudan çağrılamaz. `"use client"`` kullanarak bileşenler oluşturmamız gerekiyor:

components/sign-in.tsx

components/sign-out.tsx

Son olarak, app/page.tsx dosyamızı oluşturalım

Şifreleme uygulaması

Server Actions işini yaptı. Şimdi son kısım crypto ile gerçekleştirilebilecek şifreleme uygulamasını içeriyor.

Sonrasında, oturum kütüphanesini aşağıdaki şekilde değiştirmemiz gerekiyor:

Sonuç

Tebrikler! Next.js için durumsuz bir oturumu başarıyla uyguladınız. Bir Vercel üzerinde çevrimiçi önizleme burada ve tam kaynak kodunu indirmek için buraya tıklayabilirsiniz. Bu rehberin yeni Server Actions'ı anlamanıza yardımcı olduğunu umuyoruz.

Bir sonraki aşamada, Server Actions kullanarak Next.js için Logto'yu entegre etmeyi keşfedeceğiz. Takipte kalın!