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

السؤال

نشر

السلام عليكم.

لو تسمحوا أود معرفة الإختلاف بين الكودين التاليين.

الكود الأول:

userSchema.methods.matchPassword = async function (enteredPassword) {
  return await bcrypt.compare(enteredPassword, this.password);
};

// Encrypt password using bcrypt
userSchema.pre('save', async function (next) {
  if (!this.isModified('password')) {
    next();
  }

  const salt = await bcrypt.genSalt(10);
  this.password = await bcrypt.hash(this.password, salt);
});

الكود الثاني:

userSchema.methods.matchPassword = async function (enteredPassword) {
  return await bcrypt.compare(enteredPassword, this.password)
}

// Encrypt password using bcrypt
userSchema.pre('save', async function (next) {
  if (!this.isModified('password')) {
    next();
  }

  const salt = await bcrypt.genSalt(10);
  const hashedPassword = await bcrypt.hash(this.password, salt);
  this.password = hashedPassword;
});

مع العلم أن الكود الأول لم يقم بتشفير كلمة بينما الكود الثاني قام بتشفير كلمة المرور.

شكرا على المساعدة.

Recommended Posts

  • 0
نشر (معدل)

الكود الأول والثاني متشابهان تماما في الوظائف التي يقومان بها، الفرق الوحيد هو في الكود الثاني، حيث يتم تخزين القيمة المشفرة لكلمة المرور في متغير مؤقت (hashedPassword) قبل تعيينها إلى this.password. أما في الكود الأول، فيتم تعيين القيمة المشفرة مباشرة إلى this.password دون تخزينها في متغير مؤقت.

هذا الفرق لا يؤثر على النتيجة النهائية أو وظيفة الكود. فكلاهما سيقومان بتشفير كلمة المرور بنفس الطريقة. إذا كان الكود الأول لا يقوم بتشفير كلمة المرور، فقد يكون هناك خطأ في مكان آخر في البرنامج، ربما لو تقوم بإرفاق صور توضح المشكلة كي أجيبك بشكل أفضل.

تم التعديل في بواسطة ياسر مسكين
خطأ في التحرير
  • 0
نشر
بتاريخ 1 دقيقة مضت قال ياسر مسكين:

هذا الفرق لا يؤثر على النتيجة النهائية أو وظيفة الكود.

لكن الكود الأول لم يعمل علما وأني لم أقم بتغيير الشيفرة غير التي أرفقتها

تفضل هذا الكود الخاص بتسجيل الدخول وتعديل المستخدم

/**
 * desc   Register user
 * route  POST /api/users
 * access Public
 */
const registerUser = asyncHandler(async (req, res) => {
  const { name, email, password } = req.body;
  const userExist = await User.findOne({ email });
  if (userExist) {
    res.status(400).json({ message: "User Already Exist" });
  }

  const user = await User.create({
    name,
    email,
    password,
  });

  if (user) {
    generateToken(res, user._id);

    res.status(201).json({
      _id: user._id,
      name: user.name,
      email: user.email,
      isAdmin: user.isAdmin,
    });
  } else {
    res.status(400).json({ message: "Invalid User Data" });
  }
});

/**
 * desc   Update User profile
 * route  PUT /api/users/profile
 * access Private
 */
const updateUserProfile = asyncHandler(async (req, res) => {
  const user = await User.findById(req.user._id);

  if (user) {
    user.name = req.body.name || user.name;
    user.email = req.body.email || user.email;

    if (req.body.password) {
      user.password = req.body.password;
    }

    const updatedUser = await user.save();

    res.json({
      _id: updatedUser._id,
      name: updatedUser.name,
      email: updatedUser.email,
      isAdmin: updatedUser.isAdmin,
    });
  } else {
    res.status(404);
    throw new Error('User not found');
  }
});

 

  • 0
نشر
بتاريخ 3 دقائق مضت قال محمود سعداوي2:

لكن الكود الأول لم يعمل علما وأني لم أقم بتغيير الشيفرة غير التي أرفقتها

كل من الكود الأول والثاني يجب أن يعملا بنفس الطريقة، الفرق الوحيد هو أن الكود الثاني يخزن القيمة المشفرة لكلمة المرور في متغير مؤقت قبل تعيينها إلى this.password. في الكود الأول، يتم تعيين القيمة المشفرة مباشرة إلى this.password دون تخزينها في متغير مؤقت.

إذا كان الكود الأول لا يعمل، فقد يكون هناك خطأ في مكان آخر في البرنامج كما قلت لك، يمكنك استخدام أدوات التصحيح في Visual Studio Code لتحديد المشكلة، أما بالنسبة للفرق فلا يمكن معرفة ذلك مباشرة دون اطلاع على مشروعك وفحصه.

  • قم بوضع نقطة توقف في الكود الأول.
  • شغل البرنامج في وضع التصحيح.
  • عندما يتوقف البرنامج عند نقطة التوقف، قم بفحص قيمة this.password والقيم الأخرى المتعلقة.
  • استمر في تنفيذ البرنامج خطوة بخطوة لرؤية ما يحدث.

إذا لم تتمكن من تحديد المشكل أرفق لي ملفات المشروع كي أطلع عليها.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...