Joi doğrulama kitaplığını kullanarak verileri istek düzeyinde doğrulayarak uygulamalarınızın güvenliğini sağlayın.
Test edilmemiş ve doğrulanmamış verilerin bir web uygulamasına kabul edilmesi güvenlik açıklarına neden olabilir ve geçersiz verilerden öngörülemeyen sorunlar ortaya çıkabilir.
Sequelize ve TypeORM gibi Node.js ORM'leri, uygulama düzeyinde kullanıma hazır doğrulama kuralları belirlemenize olanak tanır. API geliştirme sırasında, veriler HTTP isteklerinden belirli uç noktalara gelir. Bu, istek düzeyinde gerçekleşir; bu nedenle, ORM'ler tarafından sunulan varsayılan doğrulama onlar için geçerli değildir.
Joi, JavaScript için bir şema açıklaması ve veri doğrulayıcıdır. Burada, istek düzeyinde verileri doğrulamak için Joi doğrulama kitaplığının nasıl kullanılacağını öğreneceksiniz.
Demo Proje Kurulumu
nasıl olduğunu göstermek için Joi verileri doğrular, gerçek bir uygulamayı taklit eden basit bir demo uygulaması oluşturacaksınız.
İlk olarak, bir proje klasörü oluşturun ve aşağıdaki komutu çalıştırarak içine taşıyın:
mkdir demo uygulaması && cd demo uygulaması
Ardından, aşağıdakileri çalıştırarak proje dizininizde npm'yi başlatın:
npm başlatma -y
Ardından, bazı bağımlılıklar kurmanız gerekecek. Bu öğretici için gereken bağımlılıklar şunları içerir:
- İfade etmek: Express, bir Node.js çerçevesidir Bu, web ve mobil uygulamalar için sağlam bir dizi özellik sağlar. Express, Node.js ile arka uç uygulamaları oluşturmayı kolaylaştırır.
- Joi: Joi, Node.js için bir veri doğrulama kitaplığıdır.
ile bağımlılıkları yükleyin düğüm paketi yöneticisi aşağıdaki komutu çalıştırarak:
npm ekspres joi'yi kur
Ardından, bir index.js kök dizininizdeki dosya ve buna aşağıdaki kod bloğunu ekleyin:
sabit ifade = gerekmek("ifade etmek");
sabit yönlendirici = gerekmek("./yollar");
sabit bağlantı noktası = 3000;sabit uygulama = ekspres();
app.use (express.json());
app.use (express.urlencoded({ uzatılmış: doğru }));
app.use (yönlendirici);
app.listen (bağlantı noktası, () => {
konsol.kayıt("uygulama 3000 numaralı bağlantı noktasında dinleniyor!");
});
Yukarıdaki kod bloğu, basit bir Ekspres sunucu kurar. Gelen istek verilerini ayrıştırmak ve gelen istekleri işlemek için ara yazılımı yapılandırır ve sunucuyu 3000 numaralı bağlantı noktasından gelen istekleri dinlemeye başlatır.
Yönlendirme ve İstekleri İşleme
Basit olması için, uygulamanıza veri göndermeye çalışan her isteğe yanıt olarak istek gövdesiyle birlikte bir durum kodu döndüren bir istek işleyici ara yazılımı oluşturacaksınız.
Oluşturmak işleyici.js projenizin kök dizininde dosya oluşturun ve aşağıdaki kod bloğunu ekleyin:
sabit demoHandler = (talep, res, sonraki) => {
res.send({
kod: 201,
veri: req.body,
});
Sonraki();
};
modül.exports = demoHandler;
Ardından, bir yönlendirici.js projenizin kök dizininde dosya oluşturun ve aşağıdaki kod bloğunu dosyanıza ekleyin:
sabit ifade = gerekmek("ifade etmek");
sabit demoHandler = gerekmek("./işleyici");
sabit yönlendirici = ekspres. Yönlendirici();yönlendirici.post("/üye olmak", demoHandler);
modül.export = yönlendirici;
Joi Şeması Oluşturma
Bir Joi şeması, belirli bir veri nesnesinin beklenen yapısını ve doğrulama kurallarını temsil eder.
Bir Joi şeması oluşturmak için, Joi.nesne() verileriniz için yapı ve doğrulama gereksinimlerini tanımlamak üzere Joi tarafından sunulan çeşitli doğrulama kurallarını yöntem ve zincirleme yapın.
Örneğin:
sabit exampleSchema = Joi.object({
isim: Joi.string().min(3).gerekli(),
});
Yukarıdaki örnek, basit bir Joi şemasını açıklamaktadır. isim mülk. bu isim özelliğin bir değeri vardır Joi.string().min (3).required(). Bu şu anlama gelir: isim değer, en az 3 karakter uzunluğunda bir dize olmalıdır ve zorunludur.
Joi'yi kullanarak, şemanızda tanımlanan her alana daha fazla doğrulama kısıtlaması eklemek için çeşitli yöntemleri zincirleyebilirsiniz.
İşte daha fazla alan ve doğrulama kısıtlaması içeren bir örnek:
sabit userSchema = Joi.object({
e-posta: Joi.string().email().required(),şifre: Joi.string().min(6).gerekli(),
yaş: Joi.number().min(18).isteğe bağlı(),
kullanılan: Joi.boolean().Optional(),
telefon: Joi.string()
.regex(/^\\d{3}-\\d{3}-\\d{4}$/)//"123-456-7890"
.gerekli(),adres: Joi.object({
sokak: Joi.string().min(3).gerekli(),
şehir: Joi.string().min(3).gerekli(),
durum: Joi.string().min(3).gerekli(),
zip: Joi.number().min(3).gerekli(),
}).gerekli(),hobiler: Joi.array().items (Joi.string()).required(),
}).seçenekler({ erken iptal: YANLIŞ });
bu kullanıcı şeması her özellik için aşağıdaki kısıtlamaları tanımlar:
- e-posta: Geçerli bir e-posta dizesi olmalıdır.
- şifre: En az 6 karakterden oluşan bir dize olmalıdır.
- yaş: Minimum değeri 18 olan isteğe bağlı bir sayı.
- istihdam: İsteğe bağlı bir boole.
- telefon: Belirtilenle eşleşen gerekli bir dize normal ifade (/^\d{3}-\d{3}-\d{4}$/).
-
adres: Aşağıdaki alt özelliklere sahip kullanıcının adresini temsil eden bir nesne.
- sokak: Minimum 3 karakter uzunluğunda gerekli bir dize.
- şehir: Minimum 3 karakter uzunluğunda gerekli bir dize.
- durum: Minimum 3 karakter uzunluğunda gerekli bir dize.
- zip: Minimum değeri 3 olan gerekli bir sayı.
- Hobiler: Gerekli bir dize dizisi.
Kısıtlamalara ek olarak, kullanıcı şeması ayarlar erken iptal seçeneği YANLIŞ. Varsayılan olarak Joi, ilk hatayla karşılaştığı anda programın yürütülmesini durdurur ve hatayı konsola yazdırır. Ancak, bu seçeneğin ayarlanması YANLIŞ Joi'nin tüm şemayı kontrol etmesini ve karşılaşılan tüm hataları konsola yazdırmasını sağlar.
Joi ile Verileri Doğrulama
Oluşturmak doğrulama.js dosyalayın ve ekleyin kullanıcı şeması ona göre kodlayın.
Şöyle:
//validation.js
sabit Joi = gerekmek("joi");sabit userSchema = Joi.object({
//...
}).seçenekler({ erken iptal: YANLIŞ });
modül.exports = userSchema;
Ardından, istek yüklerini yakalayan ve aşağıdaki kodu aşağıdaki kodu ekleyerek sağlanan bir şemaya göre doğrulayan bir ara katman yazılımı oluşturun. kullanıcı şeması kod.
sabit doğrulamaAra yazılım = (şema) => {
geri dönmek(talep, res, sonraki) => {
sabit { hata } = schema.validate (req.body);eğer (hata) {
// Doğrulama hatası işle
konsol.log (hata.mesaj);
res.status(400).json({ hatalar: hata detayları });
} başka {
// Veri geçerlidir, bir sonraki ara katman yazılımına geçin
Sonraki();
}
};
};
Bir istek yapıldığında, ara yazılım doğrulamak yöntemi şema istek gövdesini doğrulamak için. Herhangi bir doğrulama hatası oluşursa, ara yazılım bir 400 Hatalı İstek doğrulama hatası ayrıntılarından çıkarılan hata mesajlarıyla yanıt.
Öte yandan, doğrulama hatasız geçerse, ara yazılım Sonraki() işlev.
Son olarak, dışa aktarın doğrulamaAra yazılım Ve kullanıcı şeması.
modül.ihracat = {
kullanıcı şeması,
doğrulamaAra yazılım,
};
Doğrulama Kısıtlamalarını Test Etme
İçe aktarmak doğrulamaAra yazılım Ve kullanıcı şeması senin içine yönlendirici.js dosyasını açın ve ara yazılımı şu şekilde ayarlayın:
sabit { validationMiddleware, userSchema } = gerekmek("./doğrulama");
yönlendirici.post("/üye olmak", validationMiddleware (userSchema), demoHandler);
Aşağıdaki komutu çalıştırarak uygulamanızı başlatın:
düğümdizin.js
Ardından, bir HTTP POST isteği yapın. yerel ana bilgisayar: 3000/kayıt Aşağıdaki test verilerini kullanarak. Bunu cURL veya başka bir API istemcisi kullanarak başarabilirsiniz.
{
"e-posta": "kullanıcı@örnek", // Geçersiz e-posta formatı
"şifre": "geçmek", // Şifre uzunluğu 6 karakterden az
"yaş": 15, // 18 yaş altı
"çalışan": doğru,
"Hobiler": ["okuma", "koşma"],
"telefon": "123-456-789", // Geçersiz telefon numarası formatı
"adres": {
"sokak": "123",
"şehir": "Örnek Şehir",
"durum": "Örnek Durum",
"zip": 12345
}
}
Yük, e-posta, şifre, yaş ve telefon gibi birçok geçersiz alan içerdiğinden, bu istek başarısız olur ve bir hata nesnesi döndürür. Sağlanan hata nesnesini kullanarak şunları yapabilirsiniz: hataları işlemek uygun şekilde.
Joi ile Veri Doğrulamasını Basitleştirme
Burada, Joi kullanarak veri doğrulamanın temellerinin çoğunu ele aldınız. Ancak, Joi belgelerinde daha gelişmiş teknikleri ve kısıtlamaları ele alabilirsiniz.
Joi, uygulamanızda depolanan verilerin güvenilirliğini ve bütünlüğünü önemli ölçüde artıran sezgisel bir çözüm sunarak JavaScript'teki veri doğrulama görevini basitleştirir.