Node.js ile Bcrypt Kullanarak Şifre Hashleme ve Doğrulama

Posted by

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

  1. Yukarıdaki kodu app.js adında bir dosyaya kaydedin.
  2. 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…

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir