اذهب إلى المحتوى

السؤال

نشر (معدل)

لدي سؤال الان لو اردت عمل مصادقه للرقم الهاتف ما هي الطريقه الافضل لعمل ذلك مستعملا MongoDB بعد انشاء كامل Data Structure?

 

تم التعديل في بواسطة Bandar Abuseada
خطء في كتابه Structure

Recommended Posts

  • 0
نشر

الفكرة بشكل عام سهلة و يمكنك فهمها بسهولة و تطبيقها حيث بعد إنشاء الهيكلية اللازمة في MongoDB،  تأكد من أن لديك مجموعة (Collection) في MongoDB لتخزين معلومات المستخدمين، بما في ذلك رقم الهاتف ورمز التحققو لنفرض على أنها بالشكل التالي:

{
  "_id": "unique_user_id",
    "phone_number": "1234567890",
      "verification_code": "123456",
        "is_verified": false
}

عند تسجيل المستخدم أو عند طلب التحقق، قم بإنشاء رمز تحقق عشوائي وإرساله إلى رقم الهاتف باستخدام خدمة إرسال الرسائل النصية (مثل Twilio)، ثم قم بحفظ رمز التحقق المرسل في سجل المستخدم في MongoDB مع رقم الهاتف، و عندما يقوم المستخدم بإدخال رمز التحقق، قم بمقارنة الرمز المدخل مع الرمز المخزن في قاعدة البيانات، إذا كان رمز التحقق صحيحا، قم بتحديث حقل is_verified ليصبح true في سجل المستخدم.

  • 0
نشر

الامر بسيط إذا كنت قد قمت بإنشاء ال Data  Structuser الخاصة بقاعدة البيانات ولم ترد أن تقوم بتعديل ال collection الخاصة بالمستخدم فيمكنك إنشاء collection جديد ولنفرض إسمه sms_verifications و يحوي فقط ثلاثة حقول الأول هو ال id الخاص بالمستخدم و الثانى هو كود التفعيل المرسل و الأخير هو وقت إنتهاء الكود حيث يجب عليك وضعك وقت بحد أقصى 10 دقائق لإنتهاء الكود وذلك حفاظا على الأمان.

والآن بمجرد طلب المستخدم كود تفعيل تقوم بإنشاء كود عشوائى وتقوم بحفظه في collection ال sms_verifications مع حفظ ال id الخاص بالمستخدم و من ثم إرسال الكود إلى الهاتف ويوجد العديد من المواقع التى تساعدك على ذلك مثل twilio و vonage . 

والآن عند إرسال المستخدم الكود الذى أرسل له تقوم باحضار السجل من sms_verifications بال id الخاص بالمستخدم ومن ثم مقارنة الكود مع التأكد من عدم إنتهاء الكود ويفضل لو قمت بعمل hash للكود وعدم حفظه كما هو فى قاعدة البيانات .

وإذا كان الكود صحيح ولم تنتهى صلاحيته تقوم بوضع حالة المستخدم أنه verified

  • 0
نشر

يجب وجود collection في قاعدة البيانات لحفظ رقم الهاتف وكود التأكيد وحالة التأكيد أي الحقول كالتالي:

  • phone لتخزين رقم هاتف المستخدم ويجب أن يكون الحقل فريدًا لكل مستخدم.
  • verificationCode لتخزين رمز التحقق الذي يتم إرساله إلى المستخدم عبر SMS.
  • verified لتحديد هل رقم الهاتف قد تم التحقق منه أم لا، وتستطيع جعل الحقل عبارة عن قيمة منطقية (true أو false).

ثم ستحتاج إلى منطق خاص لتنفيذ ذلك، من خلال إنشاء api وليكن /send-code لإرسال كود التحقق لرقم الهاتف ولديك خدمات مثل Twilio و auth0 و Firebase لفعل ذلك.

بالطبع ستقوم بحفظ الـ OTP أو الكود في قاعدة البيانات لكي تتمكن من التحقق منه، وهناك طرق مختلفة لتوليده أحدها توليده باستخدام دالة random كالتالي:

    const verificationCode = Math.floor(100000 + Math.random() * 900000).toString();

للتوضيح إليك مثال باستخدام Twilio:

app.post('/send-code', async (req, res) => {
    const { phone } = req.body;

    const verificationCode = Math.floor(100000 + Math.random() * 900000).toString();

    let user = await User.findOne({ phone });
    if (!user) {
        user = new User({ phone, verificationCode, verified: false });
    } else {
        user.verificationCode = verificationCode;
    }
    await user.save();

    client.messages.create({
        body: `Your verification code is ${verificationCode}`,
        to: phone,
        from: 'رقمك على Twilio ',
    }).then((message) => {
        console.log(message.sid);
        res.send('Verification code sent.');
    }).catch((error) => {
        console.error(error);
        res.status(500).send('Failed to send verification code.');
    });
});

بعد إرسال الكود لرقم الهاتف سيقوم هو بإدخاله عليك إذن إنشاء api آخر باسم /verify-code لاستقبال الطلب ومعالجته والتأكد من صحة الرقم.


app.post('/verify-code', async (req, res) => {
    const { phone, code } = req.body;

    const user = await User.findOne({ phone, verificationCode: code });
    if (!user) {
        return res.status(400).send('Invalid verification code.');
    }

    user.verified = true;
    await user.save();

    res.send('Phone number verified successfully.');
});

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...