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

لا أستطيع عمل تشفير لكلمة المرور بـ bcrypt

محمد الحربي36

السؤال

قمت بعمل دالة ب جافاسكريبت لعملية المصادقة authentication والمطلوب من الكود هو التحقق من تطابق كلمة المرور المدخلة مع كلمة المرور الموجودة و المشفرة في قاعدة البيانات بعد فك تشفيرها اثناء عملية تسجيل الدخول فاذا كانت كلمة المرور المدخلة مطابقة للناتجة من عملية فك التشفير تتم عملية تسجيل الدخول بنجاح 

ولكن عندما أجرب الأمر في البوستمان يظهر لي خطأ كما هو موضح في الصور المرفقة

الكود له صورتين وجربتهم الأثنين وكلهم نفس الخطأ

بالمناسبة أنا أستعمل node js & express js

ابجد هوز حطي كلمن

passwordCheck code.png

req.body.password.png

postman error.png

login error with bcrypt.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1
بتاريخ 27 دقائق مضت قال محمد الحربي:

backend.rar 35.13 kB · 2 تنزيلات

عملية التسجيل تتم بنجاح ولكن تسجيل الدخول هو الذي تحدث به اخطاء

المشكلة الرئيسية انك تقوم بتشفير كلمة السر مرتين، المرة الاولى في الـ route المسمى register والثانية ضمن الوظيفة create نفسها حيث انك قمت بإعداد الـ module لتقوم بالتشفير بشكل تلقائي وذلك في الملف User.js.

وهذا هو الكود الخاص بك بعد التعديل ولقد اشرت إلى الاكواد التي عدلتها :

// signup post
router.post("/register", async (req, res) => {
  try {
    // hash password // create انت تقوم بالفعل بتشفير كلمة المرور قبل الحفظ في الوظيفة 
    // req.body.password = await bcrypt.hash( خطا
    // 	req.body.password, خطا
    // 	await bcrypt.genSalt(10)); خطا

    // generate te user
    const user = await User.create(req.body)

    // response
    res.json({ status: "User Created" });
  } catch (error) {
    res.status(400).json({ error });
    console.log(error)
  }
})

// login post
router.post("/login", async (req, res) => {
  try {
    // console.log(email + "0"); // خطا، تقوم باستخدام المتغير قبل تعريفه
    //   const {email} = req.body.email خطا
    //   const { password } = req.body.password خطا
    const email = req.body.email // معدل
    const password = req.body.password // معدل
    // get the user
    const user = await User.findOne({ email })
    console.log(email + "1");
    if (user) {
      console.log(password, user.password)
      const passwordCheck = await bcrypt.compare(password, user.password)
      console.log(email + "2");
      if (passwordCheck) {
        const payload = { email }
        const token = jwt.sign(payload, process.env.JWT_SECRET)
        console.log(email + "3");
        res
          .cookie("token", token, { httpOnly: true })
          .json({ payload, status: "logged in" });
        console.log(email + "4");
      } else {
        // res.status(400).json(error) // error خطا، لا يوجد متغير بهذا الاسم
        res.status(400).json({ error: "wrong password!" }) // معدل
        console.log(email + "5");
      }
      console.log(email + "6");
    } else {
      res.status(400).json({ error: "User does not exist!" })
    }
  } catch (error) {
    res.status(400).json({ error });
  }
})

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

backend.rar

بتاريخ 19 دقائق مضت قال عمر قره محمد:

هل يمكنك مشاركة ملفات المشروع حتى اتمنك من تجريب الكود.

 

عملية التسجيل تتم بنجاح ولكن تسجيل الدخول هو الذي تحدث به اخطاء

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 ساعة قال عمر قره محمد:

المشكلة الرئيسية انك تقوم بتشفير كلمة السر مرتين، المرة الاولى في الـ route المسمى register والثانية ضمن الوظيفة create نفسها حيث انك قمت بإعداد الـ module لتقوم بالتشفير بشكل تلقائي وذلك في الملف User.js.

وهذا هو الكود الخاص بك بعد التعديل ولقد اشرت إلى الاكواد التي عدلتها :

// signup post
router.post("/register", async (req, res) => {
  try {
    // hash password // create انت تقوم بالفعل بتشفير كلمة المرور قبل الحفظ في الوظيفة 
    // req.body.password = await bcrypt.hash( خطا
    // 	req.body.password, خطا
    // 	await bcrypt.genSalt(10)); خطا

    // generate te user
    const user = await User.create(req.body)

    // response
    res.json({ status: "User Created" });
  } catch (error) {
    res.status(400).json({ error });
    console.log(error)
  }
})

// login post
router.post("/login", async (req, res) => {
  try {
    // console.log(email + "0"); // خطا، تقوم باستخدام المتغير قبل تعريفه
    //   const {email} = req.body.email خطا
    //   const { password } = req.body.password خطا
    const email = req.body.email // معدل
    const password = req.body.password // معدل
    // get the user
    const user = await User.findOne({ email })
    console.log(email + "1");
    if (user) {
      console.log(password, user.password)
      const passwordCheck = await bcrypt.compare(password, user.password)
      console.log(email + "2");
      if (passwordCheck) {
        const payload = { email }
        const token = jwt.sign(payload, process.env.JWT_SECRET)
        console.log(email + "3");
        res
          .cookie("token", token, { httpOnly: true })
          .json({ payload, status: "logged in" });
        console.log(email + "4");
      } else {
        // res.status(400).json(error) // error خطا، لا يوجد متغير بهذا الاسم
        res.status(400).json({ error: "wrong password!" }) // معدل
        console.log(email + "5");
      }
      console.log(email + "6");
    } else {
      res.status(400).json({ error: "User does not exist!" })
    }
  } catch (error) {
    res.status(400).json({ error });
  }
})

 

شكرا لك أخي

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...