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.
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 bir proje klasörü oluşturun ve CD çalıştırarak içine:
mkdir kullanıcı kimlik doğrulaması
CD Kullanıcı doğrulama
Ardından, aşağıdakileri çalıştırarak proje dizininizde npm'yi başlatın:
npm başlangıç -y
bu -y flag npm'yi başlatır ve paket.json tüm varsayılanları ile dosya.
Bu kullanıcı kimlik doğrulama modeli birkaç bağımlılık gerektirir.
Onlar içerir:
- İfade etmek: Express bir Node.js çerçevesidir web ve mobil uygulamalar için sağlam bir dizi özellik sağlar. 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 dosyalamak süreç.env.
- 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 Yüklemek ekspres bcrypt firavun faresi dotenv doğrulayıcı gövde- ayrıştırıcı
Ardından, bir app.js projenizin kök dizininde dosya oluşturun ve temel bir Express sunucusu oluşturmak için aşağıdaki kod bloğunu ekleyin:
// uygulama.js
const ifade = gerekmek('ifade etmek');
const uygulama = ekspres();
const bodyParser = gerekmek("vücut ayrıştırıcı");const liman = 3000;
uygulama.kullanmak(vücut Ayrıştırıcı.json());
uygulama.kullanmak(vücut Ayrıştırıcı.urlencoding({ Genişletilmiş: doğru }));
app.listen (bağlantı noktası, ()=>{
konsol.kayıt(`Uygulama bağlantı noktasını dinliyor ${port}`);
});
Bu kod, ekspres işlevini çağırarak bir ekspres uygulama örneği oluşturur. Daha sonra kullanır vücut ayrıştırıcı gelen istek gövdelerini ayrıştırmak için ara katman yazılımı. 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 MongoDB kimlik bilgilerinizi dosyalayın ve içinde 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, şuraya gidin: app.js dosya ve firavun faresini içe aktar:
const firavun faresi = gerekmek("firavun faresi");
Ardından, içe aktarmayı arayın dotenv ve ara yapılandırma bunun üzerine yöntem:
gerekmek("dotenv".config();
aramak yapılandırma yöntem dotenv çevresel değişkenleri içine yükler süreç.env.
Son olarak, connect yöntemini çağırın. firavun faresi ve MongoDB URI'nizi argüman olarak iletin:
mongoose.connect (işlem.env. MONGODB_URI).then(() => {
konsol.log('Veritabanına Başarıyla Bağlandı')
})
Adım 3: Kullanıcı Modeli Oluşturma
Projenizin kök dizininde bir "modeller" dosya; firavun faresi modelinizi burada saklayacağınız yer:
mkdir modelleri
Ardından, bir "oluşturunkullanıcıModeli” dosyasını açın ve aşağıdaki içe aktarmaları ekleyin:
const firavun faresi = gerekmek('firavun faresi')
const { e-posta } = gerekmek('doğrulayıcı')
e-posta döndüren bir doğrulama işlevidir doğru belirli bir dize bir e-posta ise. Kullanıcı modelinize mongoose doğrulaması uygulamak için buna ihtiyacınız olacak.
Ardından, aşağıdaki kodu dosyanıza ekleyin kullanıcıModeli dosya:
// modeller/kullanıcıModel
const userSchema = firavun faresi. Şema({
e-posta: {
tip: Sicim,
gerekli: [doğru, 'Email gereklidir'],
doğrulamak: {
doğrulayıcı: isEmail,
mesaj: aksesuarlar => `${sahne.değer} geçerli bir e-posta değil`
}
},şifre: {
tip: Sicim,
gerekli: [doğru, 'Şifre gereklidir'],
doğrulamak: {
doğrulayıcı: işlev (değer) {
dönüş değer.uzunluk >= 6
},
mesaj: () =>'Şifre en az altı karakter uzunluğunda olmalıdır'
}
}
})
modül.ihracat = mongoose.model('Kullanıcı', kullanıcı şeması)
Yukarıdaki kod bir kullanıcı şeması değerini saklayan değişken firavun faresi. Şema yöntem. Firavun faresi. Şema yöntemi, özellikleri bir MongoDB koleksiyonuna eşler ve içindeki belgelerin şeklini tanımlar. Firavun faresi şemasının iki özelliği vardır: e-posta ve bir şifre-kimlik doğrulama gereksinimleriniz olacak.
email özelliği bir dize türüdür ve gereklidir true olarak ayarlayın. Bir istek gövdesi bir e-posta Emlak. Son olarak, mongoose özel doğrulamasını kullanarak, doğrulayıcı mülkiyet başvurur e-posta işlev. Bu işlev, dizenin bir e-posta olarak geçerliliğine göre doğru veya yanlış döndürür. Ardından mesaj özelliği e-posta değerini alır (sahne) 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. bu doğrulayıcı işlev, parola en az altı karakter uzunluğundaysa true değerini döndüren anonim bir işlevdir.
Son satır, bir firavun faresi modeli oluşturur ve dışa aktarır. model yöntem firavun faresi. Model adını iletin (kullanıcı) ilk argüman ve bir şema olarak (kullanıcı şeması) ikinci argüman olarak.
4. Adım: Oturum Açma ve Kayıt Yollarını Uygulama
Projenizin kök dizininde bir rotalar dosya:
mkdir yolları
Rotalar klasörünüzde bir userRoutes.js dosya ve aşağıdaki içe aktarmaları ekleyin:
// route/userRoutes.js
const ifade = gerekmek("ifade etmek");
const kullanıcı = gerekmek("../models/userModel");
const şifre = gerekmek("bcrypt");
çağırarak bir Express Router örneği oluşturun. yönlendirici yöntem ifade etmek:
const yönlendirici = ekspres. Yönlendirici();
Ardından, aşağıdaki kod bloğunu hesabınıza ekleyerek kayıt rotanızı oluşturun. kullanıcıRoute.js dosya:
yönlendirici.post("/sign-up", zaman uyumsuz (gerekli, öz) => {
denemek {
// req.body nesnesinden e-posta ve parolayı çıkar
const { email, password } = req.body;// Kontroleğer E-posta dır-dir çoktan içindekullanmak
İzin Vermek userExists = beklemek User.findOne({ email });if (userExists) {
res.durum(401.json({ ileti: "E-posta zaten kullanmak.&alıntı; });
dönüş;
}// Tuz turlarını tanımla
const tuzRounds = 10;// Hash şifresi
bcrypt.hash (şifre, saltRounds, (err, hash) => {
eğer (hata) atmakyeniHata("Dahili Sunucu Hata");// Oluşturmak a yenikullanıcı
İzin Vermek kullanıcı = yeni kullanıcı({
e-posta,
şifre: doğramak,
});
// Kullanıcıyı veritabanına kaydet
user.save().then(() => {
res.json({ mesaj: "Kullanıcı başarıyla oluşturuldu", kullanıcı });
});
});
} tutmak (hata) {
dönüşres.durum(401).göndermek(hata.İleti);
}
});
Yukarıdaki kod bloğunda, önce, e-posta ve şifreyi gerekli gövde nesne. 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, hash işlemi yaptınız bcrypt üzerinde hash yöntemini çağırarak kullanıcı şifrenizi. 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 üzerinde save metodunu çağırarak veri tabanınıza kaydedersiniz. kullanıcı misal.
Ardından, aşağıdaki kod bloğunu bilgisayarınıza ekleyerek oturum açma rotanızı oluşturun. kullanıcıRoute.js dosya:
yönlendirici.post("/sign-in", zaman uyumsuz (gerekli, öz) => {
denemek {
// req.body nesnesinden e-posta ve parolayı çıkar
const { email, password } = req.body;// Kontroleğerkullanıcıvariçindeveri tabanı
İzin Vermek kullanıcı = beklemek User.findOne({ email });if (!kullanıcı) {
dönüş res.status (401).json({ mesaj: "Geçersiz kimlik bilgileri" });
}// Şifreleri karşılaştır
bcrypt.compare (parola, kullanıcı.parola, (hata, sonuç) => {
if (sonuç) {
dönüş res.status (200).json({ mesaj: "Kullanıcı Başarıyla Giriş Yaptı" });
}konsol.log (hata);
dönüş res.status (401).json({ mesaj: "Geçersiz kimlik bilgileri" });
});
} tutmak (hata) {
res.durum(401).göndermek(hata.İleti);
}
});
modül.ihracat = yönlendirici;
Yukarıdaki kod bloğunda, önce e-posta ve şifrenin yapısını gerekli gövde nesne. 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, içe aktar yönlendirici senin içine app.js dosya ve 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.