مصادقة المستخدم هي عملية التحقق من هوية المستخدم الذي يحاول الوصول إلى التطبيق الخاص بك. يتضمن تفويض بيانات الاعتماد ونقلها لتأكيد مصداقية المستخدم.
يمكنك تنفيذ نموذج مصادقة مستخدم بسيط في Node.js باستخدام Express و Bcrypt و MongoDB ، في بضع خطوات فقط.
الخطوة الأولى: تهيئة بيئة التطوير
أولاً ، قم بإنشاء مجلد مشروع و قرص مضغوط فيه عن طريق تشغيل:
مصادقة المستخدم mkdir
قرص مضغوط مصادقة المستخدم
بعد ذلك ، قم بتهيئة npm في دليل المشروع عن طريق تشغيل:
npm الحرف الأول
ال -ص العلم يهيئ npm وينشئ الخاص بك package.json ملف بكل قيمه الافتراضية.
يتطلب نموذج مصادقة المستخدم هذا بعض التبعيات.
يشملوا:
- يعبر: Express هو إطار عمل Node.js يوفر مجموعة قوية من الميزات لتطبيقات الويب والجوال. يسهل إنشاء تطبيقات الواجهة الخلفية باستخدام Node.js.
- Bcrypt: bcrypt عبارة عن حزمة npm تنفذ وظيفة تجزئة كلمة مرور bcrypt. يسمح لك بإنشاء تجزئات من سلاسل كلمات المرور العادية.
- النمس: النمس عبارة عن مكتبة لنمذجة بيانات كائن MongoDB. يبسط التفاعلات بين تطبيقك وقاعدة بيانات MongoDB.
- dotenv: dotenv عبارة عن حزمة لا تبعية تُحمّل متغيرات البيئة من ملف .env ملف في عملية. env.
- Validator: المدقق عبارة عن حزمة تحتوي على العديد من وظائف التحقق من صحة السلسلة.
- محلل الجسم: تحلل حزمة body-parser طلبات الهيئات في برمجية وسيطة قبل معالجاتك.
قم بتثبيت الحزم عن طريق تشغيل:
npm تثبيت صريح bcrypt mongoose dotenv المدقق هيئةالموزع
بعد ذلك ، قم بإنشاء ملف app.js ملف في الدليل الجذر لمشروعك وأضف كتلة التعليمات البرمجية أدناه لإنشاء خادم Express أساسي:
// app.js
مقدار ثابت صريح = يتطلب('التعبير')؛
مقدار ثابت التطبيق = صريح () ؛
مقدار ثابت bodyParser = يتطلب("محلل الجسم") ؛مقدار ثابت المنفذ = 3000;
تطبيق.استعمال(الجسم المحلل.json());
تطبيق.استعمال(الجسم المحلل.urlencoded({ وسعوا: حقيقي }))؛
app.listen (المنفذ ، () =>{
وحدة التحكم.سجل("التطبيق يستمع على المنفذ $ {منفذ}`);
});
ينشئ هذا الرمز مثيل تطبيق سريع عن طريق استدعاء الوظيفة السريعة. ثم يستخدم ملف محلل الجسم برمجيات وسيطة لتحليل هيئات الطلبات الواردة. ثم يبدأ في الاستماع لحركة المرور على المنفذ 3000 من خلال استدعاء طريقة الاستماع للمثيل السريع وتمرير متغير المنفذ كوسيطة.
الخطوة 2: توصيل تطبيقك بقاعدة بيانات
في الدليل الجذر لمشروعك ، أنشئ ملف .env ملف وتخزين بيانات اعتماد MongoDB الخاصة بك فيه. هذا يتجنب الكشف عن بيانات اعتماد قاعدة البيانات الخاصة بك في التعليمات البرمجية التي يمكن أن تمنح المستخدمين الضارين الوصول إلى قاعدة البيانات الخاصة بك.
بعد ذلك ، انتقل إلى ملف app.js ملف واستيراد النمس:
مقدار ثابت النمس = يتطلب("النمس")؛
ثم ، اتصل بالاستيراد دوتنف واتصل ب التكوين الطريقة على ذلك:
يتطلب("دوتنف") .config () ؛
استدعاء التكوين طريقة على دوتنف تحميل المتغيرات البيئية في عملية. env.
أخيرًا ، قم باستدعاء طريقة الاتصال على النمس وتمرير MongoDB URI الخاص بك كوسيطة:
mongoose.connect (process.env. MONGODB_URI). ثم (() => {
console.log ('تم الاتصال بقاعدة البيانات بنجاح')
})
الخطوة الثالثة: إنشاء نموذج المستخدم
في الدليل الجذر لمشروعك ، أنشئ "عارضات ازياء" مجلد؛ هذا هو المكان الذي ستخزن فيه نموذج النمس:
نماذج مكدير
بعد ذلك ، قم بإنشاء "userModel"وأضف عمليات الاستيراد التالية:
مقدار ثابت النمس = يتطلب('النمس')
مقدار ثابت {isEmail} = يتطلب("المدقق")
هو البريد الإلكتروني هي دالة التحقق التي ترجع حقيقي إذا كانت السلسلة المحددة عبارة عن بريد إلكتروني. ستحتاج إليه لتطبيق التحقق من صحة النمس على نموذج المستخدم الخاص بك.
بعد ذلك ، أضف الكود التالي إلى ملف userModel ملف:
// نماذج / نموذج مستخدم
مقدار ثابت userSchema = النمس. مخطط({
البريد الإلكتروني: {
يكتب: سلسلة,
مطلوب: [صحيح ، 'البريد الالكتروني مطلوب'],
التحقق من صحة: {
المدقق: isEmail ،
الرسالة: الدعائم => `$ {props.value} ليس بريدًا إلكترونيًا صالحًا
}
},كلمه السر: {
يكتب: سلسلة,
مطلوب: [صحيح ، 'كلمة المرور مطلوبة'],
التحقق من صحة: {
المدقق: وظيفة (القيمة) {
إرجاع value.length> = 6
},
الرسالة: () =>'يجب أن تتكون كلمة المرور من ستة أحرف على الأقل'
}
}
})
وحدة.صادرات = mongoose.model ('المستخدم' ، userSchema)
يقوم الكود أعلاه بإنشاء ملف userSchema المتغير الذي يخزن قيمة النمس. مخطط طريقة. النمس. تقوم طريقة المخطط بتخطيط الخصائص لمجموعة MongoDB وتحدد شكل المستندات داخلها. مخطط النمس له خاصيتان - أ البريد الإلكتروني و أ كلمه السر—التي ستكون متطلبات المصادقة الخاصة بك.
خاصية البريد الإلكتروني هي نوع سلسلة ولها مطلوب ضبط على صواب. سيتم عرض رسالة الخطأ المصاحبة ، "البريد الإلكتروني مطلوب" ، إذا كان نص الطلب لا يحتوي على ملف البريد الإلكتروني منشأه. أخيرًا ، باستخدام التحقق المخصص من النمس ، فإن ملف المدقق تشير الخاصية إلى هو البريد الإلكتروني وظيفة. ترجع هذه الدالة صوابًا أو خطأً بناءً على صلاحية السلسلة كبريد إلكتروني. ثم تأخذ خاصية الرسالة قيمة البريد الإلكتروني (الدعائم) وإنشاء رسالة خطأ ذات مغزى.
خاصية كلمة المرور هي نوع سلسلة مطلوب مع رسالة خطأ نصها "كلمة المرور مطلوبة". ال المدقق دالة هي دالة شاذة تُرجع صحيحة إذا كانت كلمة المرور تتكون من ستة أحرف على الأقل.
يقوم السطر الأخير بإنشاء نموذج النمس وتصديره عن طريق استدعاء نموذج طريقة على النمس. مرر اسم النموذج (المستعمل) كالوسيطة الأولى والمخطط (userSchema) كحجة ثانية.
الخطوة 4: تنفيذ مسارات تسجيل الدخول والاشتراك
في الدليل الجذر لمشروعك ، أنشئ ملف الطرق مجلد:
طرق مكدير
في مجلد المسارات ، قم بإنشاء ملف userRoutes.js ملف وإضافة الواردات التالية:
// المسارات / userRoutes.js
مقدار ثابت صريح = يتطلب("التعبير")؛
مقدار ثابت المستخدم = يتطلب("../models/userModel") ؛
مقدار ثابت bcrypt = يتطلب("bcrypt") ؛
قم بإنشاء مثيل Express Router عن طريق استدعاء جهاز التوجيه طريقة على التعبير:
مقدار ثابت جهاز التوجيه = صريح. جهاز التوجيه () ؛
بعد ذلك ، قم بإنشاء مسار التسجيل الخاص بك عن طريق إضافة كتلة التعليمات البرمجية أدناه إلى ملف userRoute.js ملف:
router.post ("/sign-up"، غير متزامن (مطلوب ، الدقة) => {
محاولة {
// استخراج البريد الإلكتروني وكلمة المرور من كائن req.body
مقدار ثابت {البريد الإلكتروني ، كلمة المرور} = req.body ؛// يفحصإذا البريد الإلكتروني هو سابقا فياستعمال
يترك userExists = انتظر User.findOne ({email}) ؛إذا (userExists) {
res.status (401) .json ({message: "البريد الإلكتروني موجود بالفعل استعمال.&مثل; });
إرجاع;
}// تحديد جولات الملح
مقدار ثابت جولات الملح = 10;// تجزئة كلمة المرور
bcrypt.hash (كلمة المرور ، جولات الملح ، (Err ، التجزئة) => {
إذا (يخطئ) يرميالجديدخطأ("الخادم الداخلي خطأ");// خلق أ الجديدالمستعمل
يترك المستخدم = الجديد المستعمل({
البريد الإلكتروني،
كلمه السر: تجزئة,
});
// حفظ المستخدم في قاعدة البيانات
user.save (). ثم (() => {
res.json ({الرسالة: "تم إنشاء المستخدم بنجاح"، المستعمل })؛
});
});
} قبض على (يخطئ) {
إرجاعالدقة.الحالة(401).إرسال(يخطئ.رسالة);
}
});
في مقطع التعليمات البرمجية أعلاه ، أولاً ، قمت بإعادة هيكلة البريد الإلكتروني وكلمة المرور من ملف مطلوب شخص هدف. بعد ذلك ، تحقق مما إذا كان المستخدم يستخدم البريد الإلكتروني بالفعل لأنه يجب أن يكون فريدًا لكل مستخدم. إذا تم استخدام البريد الإلكتروني بالفعل ، يمكنك العودة وإيقاف تنفيذ الرمز برمز الحالة 401.
يعد تخزين كلمات المرور العادية في قاعدة بيانات تهديدًا أمنيًا كبيرًا حيث قد يتمكن المتسللون الضارون من الوصول إلى قاعدة البيانات. يجب عليك تجزئة كلمات المرور قبل إدخالها في قاعدة البيانات الخاصة بك ، لذلك حتى إذا اكتشفها أحد المتطفلين ، فلا ينبغي أن يكون هناك خطر على المستخدمين. التجزئة هي عملية تحويل "مفتاح" معين إلى قيمة أخرى. التجزئة هي وظيفة ذات اتجاه واحد ، مما يعني أنه لا يمكنك استرداد القيمة الأصلية من القيمة المجزأة ، على عكس التشفير.
باستخدام bcrypt ، قمت بالتجزئة كلمة مرور المستخدم الخاصة بك عن طريق استدعاء طريقة التجزئة على bcrypt. تأخذ طريقة التجزئة ثلاث معاملات: السلسلة المراد تجزئتها ، وجولات الملح ، ووظيفة رد النداء. يمكنك تمرير كلمة مرور المستخدم ، ومتغير SaltRounds الذي أنشأته مسبقًا ، وإعادة الاتصال.
تشير جولات الملح إلى الوقت اللازم لحساب تجزئة bcrypt واحدة. كلما زادت دورات الملح ، زادت دورات التجزئة.
إذا ألقى أسلوب التجزئة خطأً ، فسيتم طرح "خطأ داخلي في الخادم". عدا ذلك ، يمكنك تعيين خاصية كلمة المرور على التجزئة الناجحة وحفظها في قاعدة البيانات الخاصة بك عن طريق استدعاء طريقة الحفظ على ملف المستعمل نموذج.
بعد ذلك ، قم بإنشاء مسار تسجيل الدخول الخاص بك عن طريق إضافة كتلة التعليمات البرمجية أدناه إلى ملف userRoute.js ملف:
router.post ("/sign-in"، غير متزامن (مطلوب ، الدقة) => {
محاولة {
// استخراج البريد الإلكتروني وكلمة المرور من كائن req.body
مقدار ثابت {البريد الإلكتروني ، كلمة المرور} = req.body ؛// يفحصإذاالمستعملموجودفيقاعدة البيانات
يترك المستخدم = انتظر User.findOne ({email}) ؛إذا (! مستخدم) {
إرجاع res.status (401) .json ({message: "بيانات الاعتماد غير صالحة" });
}// قارن كلمات المرور
bcrypt.compare (كلمة المرور ، كلمة مرور المستخدم ، (خطأ ، نتيجة) => {
إذا (نتيجة) {
إرجاع res.status (200) .json ({message: "تم تسجيل دخول المستخدم بنجاح" });
}وحدة التحكم.log (يخطئ) ؛
إرجاع res.status (401) .json ({message: "بيانات الاعتماد غير صالحة" });
});
} قبض على (خطأ) {
الدقة.الحالة(401).إرسال(يخطئ.رسالة);
}
});
وحدة.صادرات = جهاز التوجيه ؛
في مقطع التعليمات البرمجية أعلاه ، أولاً ، تقوم بإلغاء هيكلة البريد الإلكتروني وكلمة المرور من ملف مطلوب شخص هدف. بعد ذلك ، يمكنك التحقق مما إذا كان المستخدم موجودًا في قاعدة البيانات الخاصة بك. إذا كان المستخدم غير موجود في قاعدة البيانات الخاصة بك ، فسترجع مع رمز الحالة 401.
بعد ذلك ، باستخدام طريقة المقارنة الخاصة بـ bcrypt ، قم بتمرير كلمة المرور التي قدمها المستخدم وكلمة المرور المجزأة التي استردتها من قاعدة البيانات الخاصة بك. قارن بين الاثنين لتأكيد ما إذا كانا متطابقين. إذا كانت كلمتا المرور متطابقتين ، فقم بإرجاع 200 رمز حالة ورسالة نجاح. عدا ذلك ، تقوم بإرجاع رمز الحالة 401 ورسالة خطأ.
أخيرًا ، استيراد جهاز التوجيه الدخول الى حسابك app.js ملف واستخدمه كبرنامج وسيط على مستوى التطبيق.
هذا يكمل نموذج مصادقة المستخدم الخاص بك ؛ الآن ، يمكن للمستخدمين الاشتراك بأمان وتسجيل الدخول إلى التطبيق الخاص بك.
أهمية مصادقة المستخدم
تضمن مصادقة المستخدم أن المستخدمين الشرعيين فقط هم من يمكنهم الوصول إلى تطبيقك. إذا كانت بياناتك شخصية أو خاصة بأي شكل من الأشكال ، فيجب عليك اتخاذ خطوات لمنع المستخدمين غير المصادق عليهم من الوصول.