Kullanıcı doğrulama, uygulamanıza erişmeye çalışan bir kullanıcının kimliğini doğrulama işlemidir. Bir kullanıcının özgünlüğünü doğrulamak için kimlik bilgilerinin yetkilendirilmesini ve aktarılmasını içerir.

Ekspres Uygulamalarda Kullanıcı Kimlik Doğrulaması Uygulama

Node.js’de Express, Bcrypt ve MongoDB kullanarak basit bir kullanıcı kimlik doğrulama modelini yalnızca birkaç adımda uygulayabilirsiniz.

1. Adım: Geliştirme Ortamını Ayarlama

İlk önce, aşağıdakileri çalıştırarak bir proje klasörü ve cd oluşturun :

mkdir user-authentication

cd user-authentication

Ardından, aşağıdakileri çalıştırarak proje dizininizde npm’yi başlatın:

npm init -y

-y bayrağı npm’yi başlatır ve tüm varsayılanlarıyla package.json dosyanızı oluşturur.

Bu kullanıcı kimlik doğrulama modeli birkaç bağımlılık gerektirir.

Onlar içerir:

Express: Express, web ve mobil uygulamalar için sağlam bir dizi özellik sağlayan bir Node.js çerçevesidir . Node.js ile arka uç uygulamaları oluşturmayı kolaylaştırır.

Bcrypt: bcrypt, bcrypt parola karma işlevini uygulayan bir npm paketidir. Düz parola dizelerinden karma oluşturmanıza olanak tanır.

Mongoose: Mongoose bir MongoDB nesne veri modelleme kitaplığıdır. Uygulamanız ve bir MongoDB veritabanı arasındaki etkileşimleri basitleştirir.

dotenv: dotenv, ortam değişkenlerini bir .env dosyasından process.env dosyasına yükleyen sıfır bağımlılıklı bir pakettir .

Doğrulayıcı: doğrulayıcı, çeşitli dize doğrulama işlevlerini içeren bir pakettir.

Gövde ayrıştırıcı: Gövde ayrıştırıcı paketi, işleyicilerinizden önce bir ara katman yazılımında istek gövdelerini ayrıştırır.

Paketleri çalıştırarak kurun:

npm install express bcrypt mongoose dotenv validator body-parser

Ardından, projenizin kök dizininde bir app.js dosyası oluşturun ve temel bir Express sunucusu oluşturmak için aşağıdaki kod bloğunu ekleyin:

// app.js

const express = require(‘express’);

const app = express();

const bodyParser = require(“body-parser”);

const port = 3000;

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({ extended: true }));

app.listen(port, ()=>{

    console.log(`App is listening on port ${port}`);

});

Bu kod, ekspres işlevini çağırarak bir ekspres uygulama örneği oluşturur. Ardından, gelen istek gövdelerini ayrıştırmak için gövde ayrıştırıcı ara yazılımını kullanır. Ardından, ekspres örneğin dinleme yöntemini çağırarak ve port değişkenini argüman olarak ileterek 3000 numaralı bağlantı noktasındaki trafiği dinlemeye başlar.

Adım 2: Uygulamanızı Bir Veritabanına Bağlama

Projenizin kök dizininde bir .env dosyası oluşturun ve MongoDB kimlik bilgilerinizi bu dosyada saklayın. Bu, kötü niyetli kullanıcıların veritabanınıza erişmesine izin verebilecek kodda veritabanı kimlik bilgilerinizin ifşa edilmesini önler.

Ardından, app.js dosyanıza gidin ve mongoose’u içe aktarın:

const mongoose = require(“mongoose”);

Ardından, import dotenv’i çağırın ve üzerindeki yapılandırma yöntemini çağırın:

require(“dotenv”).config();

Dotenv üzerinde yapılandırma yöntemini çağırmak, çevresel değişkenleri process.env dosyasına yükler .

Son olarak, mongoose üzerinde connect yöntemini çağırın ve MongoDB URI’nizi bir argüman olarak iletin:

mongoose.connect(process.env.MONGODB_URI).then(() => {

    console.log(‘Connected to Database Successfully’)

})

Adım 3: Kullanıcı Modeli Oluşturma

Projenizin kök dizininde bir “ modeller ” klasörü oluşturun; firavun faresi modelinizi burada saklayacağınız yer:

mkdir models

Ardından, bir ” userModel ” dosyası oluşturun ve aşağıdaki içe aktarmaları ekleyin:

const mongoose = require(‘mongoose’)

const { isEmail } = require(‘validator’)

isEmail , belirli bir dize bir e-posta ise true değerini döndüren bir doğrulama işlevidir . Kullanıcı modelinize mongoose doğrulaması uygulamak için buna ihtiyacınız olacak.

Ardından, userModel dosyanıza aşağıdaki kodu ekleyin :

// models/userModel

const userSchema = mongoose.Schema({

    email: {

        type: String,

        required: [true, ‘Email is required’],

        validate: {

            validator: isEmail,

            message: props => `${props.value} is not a valid email`

        }

    },

    password: {

        type: String,

        required: [true, ‘Password is required’],

        validate: {

            validator: function (value) {

                return value.length >= 6

            },

            message: () => ‘Password must be at least six characters long’

        }

    }

})

module.exports = mongoose.model(‘User’, userSchema)

Yukarıdaki kod , mongoose.Schema yönteminin değerini depolayan bir userSchema değişkeni oluşturur. mongoose.Schema yöntemi, özellikleri bir MongoDB koleksiyonuna eşler ve içindeki belgelerin şeklini tanımlar. Mongoose şemasının iki özelliği vardır – bir e- posta ve bir şifre – ve bunlar sizin kimlik doğrulama gereksinimleriniz olacaktır.

Email özelliği bir dize türüdür ve true olarak ayarlanması gerekir . Bir istek gövdesi bir e-posta özelliği içermiyorsa, beraberindeki “E-posta gerekli” hata mesajı görüntülenir . Son olarak, mongoose özel doğrulamasını kullanarak validator özelliği isEmail işlevine başvurur . Bu işlev, dizenin bir e-posta olarak geçerliliğine göre doğru veya yanlış döndürür. Daha sonra mesaj özelliği e-posta değerini ( props ) alır ve anlamlı bir hata mesajı oluşturur.

password özelliği, “Parola gerekli” yazan bir hata mesajıyla birlikte gerekli bir dize türüdür. Doğrulayıcı işlevi, parola en az altı karakter uzunluğundaysa true değerini döndüren anonim bir işlevdir.

Son satır, mongoose üzerinde model yöntemini çağırarak bir firavun faresi modeli oluşturur ve dışa aktarır . Model adını ( User ) ilk argüman olarak ve bir şemayı ( userSchema ) ikinci argüman olarak iletin.

4. Adım: Oturum Açma ve Kayıt Yollarını Uygulama

Projenizin kök dizininde bir rota klasörü oluşturun:

mkdir routes

Rotalar klasörünüzde bir userRoutes.js dosyası oluşturun ve aşağıdaki içe aktarmaları ekleyin:

// routes/userRoutes.js

const express = require(“express”);

const User = require(“../models/userModel”);

const bcrypt = require(“bcrypt”);

Express üzerinde Router yöntemini çağırarak bir Express Router örneği oluşturun :

const router = express.Router();

Ardından, aşağıdaki kod bloğunu userRoute.js dosyanıza ekleyerek kayıt rotanızı oluşturun:

router.post(“/sign-up”, async (req, res) => {

  try {

    // Extract email and password from the req.body object

    const { email, password } = req.body;

    // Check if the email is already in use

    let userExists = await User.findOne({ email });

    if (userExists) {

      res.status(401).json({ message: “Email is already in use." });

      return;

    }

    // Define salt rounds

    const saltRounds = 10;

    // Hash password

    bcrypt.hash(password, saltRounds, (err, hash) => {

      if (err) throw new Error(“Internal Server Error”);

      // Create a new user

      let user = new User({

        email,

        password: hash,

      });

      // Save user to database

      user.save().then(() => {

        res.json({ message: “User created successfully”, user });

      });

    });

  } catch (err) {

    return res.status(401).send(err.message);

  }

});

Yukarıdaki kod bloğunda, ilk olarak, req.body nesnesinden e-posta ve parolanın yapısını bozarsınız. Ardından, her kullanıcı için benzersiz olması gerektiğinden, bir kullanıcının e-postayı zaten kullanıp kullanmadığını kontrol edin. E-posta zaten kullanılmışsa, 401 durum koduyla kod yürütmeyi döndürür ve durdurursunuz.

Kötü niyetli bilgisayar korsanları veritabanına erişebileceğinden, düz parolaları bir veritabanında saklamak büyük bir güvenlik tehdididir. Veritabanınızda sıralamadan önce şifreleri hash etmelisiniz, böylece bir bilgisayar korsanı onları keşfetse bile, kullanıcılar için bir risk olmamalıdır. Hashing, verilen bir “anahtarın” başka bir değere dönüştürülmesi işlemidir. Hashing tek yönlü bir fonksiyondur, yani şifrelemeden farklı olarak hased olandan orijinal değeri alamazsınız.

bcrypt kullanarak, bcrypt üzerindeki hash yöntemini çağırarak kullanıcı şifrenizi hash ettiniz. Karma yöntemi üç parametre alır: karma oluşturulacak dize, tuz turları ve bir geri arama işlevi. Kullanıcı parolasını, daha önce oluşturduğunuz saltRounds değişkenini ve bir geri aramayı iletirsiniz.

Tuz turları, tek bir bcrypt karmasını hesaplamak için gereken süreyi ifade eder. Tuz turları ne kadar yüksek olursa, hash turları o kadar fazla olur.

Hash yöntemi bir hata verirse, bir “dahili sunucu hatası” atarsınız. Aksi takdirde, başarılı hash için password özelliğini ayarlarsınız ve User örneğinde save yöntemini çağırarak bunu veritabanınıza kaydedersiniz.

Ardından, aşağıdaki kod bloğunu userRoute.js dosyanıza ekleyerek oturum açma rotanızı oluşturun:

router.post(“/sign-in”, async (req, res) => {

  try {

    // Extract email and password from the req.body object

    const { email, password } = req.body;

    // Check if user exists in database

    let user = await User.findOne({ email });

    if (!user) {

      return res.status(401).json({ message: “Invalid Credentials” });

    }

    // Compare passwords

    bcrypt.compare(password, user.password, (err, result) => {

      if (result) {

        return res.status(200).json({ message: “User Logged in Successfully” });

      }

      console.log(err);

      return res.status(401).json({ message: “Invalid Credentials” });

    });

  } catch (error) {

    res.status(401).send(err.message);

  }

});

module.exports = router;

Yukarıdaki kod bloğunda, önce, req.body nesnesinden e-posta ve parolanın yapısını bozarsınız. Ardından, veritabanınızda bir kullanıcının olup olmadığını kontrol edersiniz. Kullanıcı veritabanınızda yoksa, 401 durum koduyla geri dönersiniz.

Ardından, bcrypt’in karşılaştırma yöntemini kullanarak, kullanıcının sağladığı parolayı ve veritabanınızdan aldığınız karma parolayı girin. Eşleşip eşleşmediklerini doğrulamak için ikisini karşılaştırın. Parolalar eşleşirse, bir 200 durum kodu ve bir başarı mesajı döndürürsünüz. Aksi takdirde bir 401 durum kodu ve bir hata mesajı döndürürsünüz.

Son olarak, yönlendiriciyi app.js dosyanıza aktarın ve onu uygulama düzeyinde bir ara katman yazılımı olarak kullanın.

Bu, kullanıcı kimlik doğrulama modelinizi tamamlar; Artık kullanıcılar uygulamanıza güvenli bir şekilde kaydolabilir ve oturum açabilir.

Kullanıcı Kimlik Doğrulamasının Önemi

Kullanıcı kimlik doğrulaması, yalnızca yasal kullanıcıların uygulamanıza erişmesini sağlar. Verileriniz herhangi bir şekilde kişisel veya özel ise, kimliği doğrulanmamış kullanıcıların erişim elde etmesini önlemek için adımlar atmalısınız.

Bir cevap yazın

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