JavaScript Postman ile session bilgileri alınırken ön yüzden alınamıyor

Yunus Tosun

Hectopat
Katılım
11 Haziran 2019
Mesajlar
30
Node.js ile birlikte geliştirmiş olduğum projede user bilgilerini sessiona kaydetmek istiyorum. Kayıt aslında başarılı oluyor ve postmandan session bilgilerini kullanan bir URL'ye istek attığımda her şey normal çalışıyor. Ama ön yüzden istek attığımda req. Session. User undefined olarak dönüyor. Cors ve session ayarlarını da önerilen şekilde yaptım fakat bir türlü çözemedim problemi. Yardımcı olabilirseniz sevinirim.
User bilgilerini req.Session.User'a kaydettiğim Controller fonksiyonum şu şekilde:

JavaScript:
exports.loginWithLdap = catchAsync(async (req, res, next) => {
 const { username, password } = req.body;

 if (!username || !password) {
 return next(new AppError('Please provide username and password!', 404));
 }
 const user = await ldapService.authenticate(username, password);
 console.log(user);
 if (!user) {
 return next(new AppError('Ldap authentication failed!', 401));
 }

 const otp = await otpService.generateAndSaveOTP(user.mail);

 await otpService.sendOTP(user.mail, otp);
 req.session.user = user;
 res.status(200).json({
 status: 'success',
 message: 'OTP sent successfully!',
 });
});

User bilgilerini çağırdığım fonksiyon ise şu:

JavaScript:
exports.verifyOtp = catchAsync(async (req, res, next) => {
 console.log(req.session.user);
 const { otp } = req.body;
 if (!otp) {
 return next(
 new AppError('Please provide an OTP code for authentication!', 404)
 );
 }
 console.log('otpServiceUser', req.session.user);
 await otpService.verifyOTP(req.session.user.mail, otp);
 createSendToken(req.session.user, 200, res);
});

Cors ve session ayarlarımın konfigürasyonunu da şöyle yaptım:

JavaScript:
app.use(
 cors({
 origin: 'http://localhost:5173',
 credentials: true,
 methods: ['GET', 'HEAD', 'PUT', 'PATCH', 'POST', 'DELETE'],
 })
);

app.use(
 session({
 secret: 'secret123',
 resave: true,
 saveUninitialized: true,
 cookie: {
 httpOnly: true,
 secure: false,
 sameSite: 'none',
 maxAge: 24 * 60 * 60 * 1000,
 },
 })
);

app.use('/api', userRouter);
 
Son düzenleyen: Moderatör:
Postmande çalışıp web de çalışmıyorsa, web tarafında bir sorun vardır. API isteği yaptığın yerde credentials ayarlamak gerekiyor sanırım.
JavaScript:
// fetch
fetch("/api/blabla", { credentials: 'include' })

// axios
axios.get('/api/blabla', { withCredentials: true })

Sen nasıl istek yapıyorsun?
 
JavaScript:
const response = await fetch(`http://127.0.0.1:3000/api/login`, {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ username: username, password: password }),
        credentials: "include"
      });

Yapmış olduğum istek kodu yukarıdaki gibi ama yine undefined olarak gösteriyor.
 
Çok garip. Olmaması gerek. Cookie den kaynaklı sanırım. Dev Tools dan network kısmına gelip yapmış olduğun isteğin, request headers dan Cookie var mı yok mu kontrol eder misin?
Büyük ihtimalle yok. Olmadığı için bu hatayı veriyor. Ben de geçenlerde Set-Cookie same-site uyarısı aldığım bir durum yaşadım. Sende de aynısı olabilir. Chrome da hata verirken, firefoxta çalışıyordu. Sende bir dener misin, firefox da çalışacak mı?
 


Normalde Chrome kullanıyordum, Edgeden denedim ve dediğin gibi request kısmında Cookie yok.



Normalde Chrome kullanıyordum, Edgeden denedim ve dediğin gibi request kısmında Cookie yok.
Geliştirici konsolunu inceledim set-cookie nin yanında ünlem işareti vardı. Üzerine geldiğimde sameSite "none" olarak ayarlanmış fakat secure:false o yüzden cookie set edilemedi diyor. Cookie'nin değeri session_id=... tarzı bir şeydi. Passport engelliyor olabilir mi benim yapmak istediğim işlemi? Oauth için kullanıyorum sadece passportu normal girişle bir alakası yok ama.
 
Son düzenleme:
Passport ile alakası olmayabilir. Az önce test ettim kendimde evet dediğin gibi cookie gelmiyor. Ama firefoxta çalıştı. Chrome da çalışmıyor.
https ile çalıştırılabilir yapıp secure: true yapıp denemek lazım. Belki https olunca düzelir. Yada en kötü aynı domain adreslerde denemek lazım.
Musait olduğum bir ara deneyeyim.
 
En yakın zamanda müsait olduğunda düzenleyip atabilirsen sevinirim. Çok teşekkür ederim yardımların ve ilgin için.

İki uygulamayı da httpse çevirdim, sonuç yine değişmedi.
 
Son düzenleme:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…