NexJS client ve NodeJS api uygulamasında JWT auth işlemleri nasıl olmalı?
Bir nodejs api uygulamam birde nextjs13 app dir client uygulamam var.
Login veya register olduğum zaman register oluyorum ve mesaj olarak 200 ok res ile beraber tokeni dönüyorum. Devamında belli başlı işlemler için bir AuthMiddleware oluşturdum ve burada verify + decode ediyor ve token expire olmuşsa geçersiz token dönüyorum, geçerliysede ilgili router'ın işini yapmasına izin veriyorum.
Buraya kadar bir sorun yok. Sunucumda sonra olarak /api/verify/token şeklinde bir endpoint oluşturdum ve burayada sunucu tarafında AuthMiddleware ekledim, token kontrolü yapıyorum eğer token geçerliyse bu endpoint üzerinden username, role(müşteri, admin vb.), mail adresi, tokenin şifreli versiyonu gibi şeyleri dönüyorum.
Anlamadığım nokta şu nextjs tarafında nasıl bu verify endpointini kullanarak sunucuyu oturumda tutacağım ve yetkisi olmayan sayfalara girmesini engelleyeceğim? Örneğin role müşteri ise sadece /user, /user/reports gibi sayfalara girebilmesini istiyorum. /admin ise sadece admin rolündeki bir kullanıcı girebilsin istiyorum.
Bir çok çözüm denedim fakat bir türlü kullanıcıyı oturumda tutarak protected routing yapamıyorum.
Ek olarak login işlemi sırasında httpOnly bir cookie oluşturuyor ve tokeni içerisine koyup cookiyede token ile aynı uzunlukla bir expire date belirliyorum.
Bunların totalini client tarafında nasıl birleştirip oturum işlemlerini yapabileceğimi çözemedim.
Amacım her sayfa değiştiğinde üyenin tokenini kontrol etmek ve token ile bağlantılı kullanıcının bilgilerine göre işlem yapabilmesini sağlamak.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (3)
Aslında bende Tayfun hocamın ReactRouter videolarındaki gibi localstorage veya tarayıcı tarafında bir çereze alsam aynı şeyi redux toolkit ile yapabiliyorum fakat ben güvenliğin bir tık daha sağlam olması için bunu httpOnly olarak yapmak istiyorum. httpOnly cookie'yi sunucu tarafında başarılı bir şekilde oluşturup Postman'de falanda yönetebiliyorum fakat tarayıcı tarafında NextJS ile beraber bu httpOnly çerezi bir türlü kullanamadım. İzlediğim videolarda yaptığım şeylerin aynısını yaptıklarında tarayıcıda application > cookies altına httpOnly çerez geliyor fakat bende Postman'de olmasına rağmen bir türlü gelmiyor. Bunu çözebilirsem redux toolkit + JWT + httpOnly cookie şeklinde çözeceğim.
iki yolu var serverde rol kontrolü sağlayan bir middleware yazman,
ya da server tarafindan gelen role bilgisini clientde protected route yapisiyla handle etmen lazim,
protected route icin tayfun abinin 2-3 videosu var react router v6 icin bir video cekmisti onu nexte uyarlayabilirsin yada insta clone serisinde firebase isleminds detayli anlatmisti bakabilirsin.