Merhaba arkadaşlar, bu yazımda sizlere Node.js ile Bcrypt Kullanarak Şifre Hashleme ve Doğrulama konusundan bahsedeceğim.
Kullanıcı verilerini güvenli bir şekilde saklamak, modern web uygulamaları için kritik bir gerekliliktir. Özellikle kullanıcı şifrelerinin güvenli bir şekilde saklanması, veri ihlali durumlarında kullanıcıların korunması açısından büyük önem taşır. Bu yazıda, Node.js kullanarak bcrypt
ile şifre hashleme ve doğrulama işlemlerini gerçekleştiren basit bir uygulama geliştireceğiz.
bcrypt
, şifre hashleme işlemleri için güçlü ve güvenli bir kütüphanedir. Şifrelerin düz metin olarak saklanması güvenlik risklerine yol açar. Bunun yerine, bcrypt
ile şifreler hashlenir ve bu hashler saklanır. Ayrıca kullanıcı giriş yaptığında, girilen şifrenin saklanan hash ile eşleşip eşleşmediğini kontrol edebiliriz.
Gerekli Paketlerin Kurulumu
Öncelikle, Node.js ortamında gerekli bağımlılıkları yükleyelim:
Terminal üzerinden ya da cmd üzerinden projemiz dizini içerisinde öncelikle bcrypt paketimizi ve express paketimizi yüklüyoruz. Örnek bir API uygulaması yazacağız.
npm install bcrypt express body-parser
Bu komut, bcrypt
kütüphanesini hashleme için ve express
ile body-parser
paketlerini HTTP isteklerini yönetmek için yüklüyoruz.
Bcyrpt paketine aşağıdaki linkten de erişebilirsiniz.
https://www.npmjs.com/package/bcrypt
Uygulama Kodları
Aşağıda, basit bir Node.js uygulaması ile şifre hashleme ve doğrulama işlemlerini nasıl yapacağımızı göreceğiz.
1. Sunucu Oluşturma
Aşağıdaki kod, bir Express sunucusu oluşturur ve gerekli endpoint’leri tanımlar:
const express = require('express');
const bodyParser = require('body-parser');
const bcrypt = require('bcrypt');
const app = express();
const port = 3000;
// Middleware
app.use(bodyParser.json());
// Veritabanı simulasyonu
const users = []; // Kullanıcı verilerini saklayacağımız bir dizi
// Şifre Hashleme
app.post('/register', async (req, res) => {
const { username, password } = req.body;
if (!username || !password) {
return res.status(400).json({ message: 'Kullanıcı adı ve şifre gerekli!' });
}
try {
// Şifreyi hashle
const saltRounds = 10;
const hashedPassword = await bcrypt.hash(password, saltRounds);
// Kullanıcıyı "veritabanına" kaydet
users.push({ username, password: hashedPassword });
res.status(201).json({ message: 'Kullanıcı kaydedildi!' });
} catch (error) {
res.status(500).json({ message: 'Hata oluştu!', error });
}
});
// Şifre Doğrulama
app.post('/login', async (req, res) => {
const { username, password } = req.body;
if (!username || !password) {
return res.status(400).json({ message: 'Kullanıcı adı ve şifre gerekli!' });
}
try {
// Kullanıcıyı bul
const user = users.find((u) => u.username === username);
if (!user) {
return res.status(404).json({ message: 'Kullanıcı adı veya şifre hatalı!' });
}
// Şifreyi doğrula
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
return res.status(401).json({ message: 'Kullanıcı adı veya şifre hatalı!' });
}
res.status(200).json({ message: 'Giriş başarılı!' });
} catch (error) {
res.status(500).json({ message: 'Hata oluştu!', error });
}
});
// Sunucuyu başlat
app.listen(port, () => {
console.log(`Sunucu çalışıyor: http://localhost:${port}`);
});
2. Uygulamayı Çalıştırma
- Yukarıdaki kodu
app.js
adında bir dosyaya kaydedin. - Aşağıdaki komutla sunucuyu çalıştırın:
node app.js
Uygulama dosyanızın adı ne ise onu yazabilirsiniz. İsterseniz index.js isterseniz server.js olarak isimlendirme de yapabilirsiniz. Komutu çalıştırdıktan sonra aşağıdaki uyarıyız
Sunucunun http://localhost:3000
adresinde çalıştığını göreceksiniz.
Kontrollerimizi POSTMAN uygulaması üzerinden yapabilirsiniz.
API Kullanımı
1. Kullanıcı Kaydetme (Register)
- Endpoint:
/register
- Yöntem:
POST
- Gövde (JSON):
Postman üzerinden http://localhost:300 adresini yazarak ve metot tipini POST olarak ayarladıktan sonra aşağıdaki json içeriğini Body içerisinde Json gönderim seçeneğini seçerek aşağıdaki json içeriğini yazabilirsiniz.
{
"username": "kullanici1",
"password": "123456"
}
Yanıt (Başarılı):
{
"message": "Kullanıcı kaydedildi!"
}
2. Giriş Yapma (Login)
- Endpoint:
/login
- Yöntem:
POST
- Gövde (JSON):
{
"username": "kullanici1",
"password": "123456"
}
Başarılı Yanıt:
{
"message": "Giriş başarılı!"
}
Başarısız Yanıt:
{
"message": "Şifre hatalı!"
}
Sonuç
Bu basit uygulama, bcrypt
kullanarak şifre hashleme ve doğrulama işlemlerinin nasıl yapılacağını göstermektedir. Gerçek bir uygulamada, kullanıcı verilerini bir veri tabanında saklamanız ve ek güvenlik önlemleri almanız gerektiğini unutmayın.
Daha fazla güvenlik için aşağıdaki önerilere dikkat edin:
- Hashleme işlemi için kullanılan
saltRounds
değerini yeterince yüksek tutun. - HTTPS kullanarak veri iletimini güvence altına alın.
- Şifre sıfırlama işlemleri ekleyin.
Umarım faydalı olur.
Bir sonraki yazıda görüşmek üzere…