محمود سعداوي2 نشر 22 مارس أرسل تقرير نشر 22 مارس السلام عليكم. لو تسمحوا أود معرفة الإختلاف بين الكودين التاليين. الكود الأول: 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; }); مع العلم أن الكود الأول لم يقم بتشفير كلمة بينما الكود الثاني قام بتشفير كلمة المرور. شكرا على المساعدة. 1 اقتباس
0 ياسر مسكين نشر 23 مارس أرسل تقرير نشر 23 مارس (معدل) الكود الأول والثاني متشابهان تماما في الوظائف التي يقومان بها، الفرق الوحيد هو في الكود الثاني، حيث يتم تخزين القيمة المشفرة لكلمة المرور في متغير مؤقت (hashedPassword) قبل تعيينها إلى this.password. أما في الكود الأول، فيتم تعيين القيمة المشفرة مباشرة إلى this.password دون تخزينها في متغير مؤقت. هذا الفرق لا يؤثر على النتيجة النهائية أو وظيفة الكود. فكلاهما سيقومان بتشفير كلمة المرور بنفس الطريقة. إذا كان الكود الأول لا يقوم بتشفير كلمة المرور، فقد يكون هناك خطأ في مكان آخر في البرنامج، ربما لو تقوم بإرفاق صور توضح المشكلة كي أجيبك بشكل أفضل. تم التعديل في 23 مارس بواسطة ياسر مسكين خطأ في التحرير 1 اقتباس
0 محمود سعداوي2 نشر 23 مارس الكاتب أرسل تقرير نشر 23 مارس بتاريخ 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'); } }); 1 اقتباس
0 ياسر مسكين نشر 23 مارس أرسل تقرير نشر 23 مارس بتاريخ 3 دقائق مضت قال محمود سعداوي2: لكن الكود الأول لم يعمل علما وأني لم أقم بتغيير الشيفرة غير التي أرفقتها كل من الكود الأول والثاني يجب أن يعملا بنفس الطريقة، الفرق الوحيد هو أن الكود الثاني يخزن القيمة المشفرة لكلمة المرور في متغير مؤقت قبل تعيينها إلى this.password. في الكود الأول، يتم تعيين القيمة المشفرة مباشرة إلى this.password دون تخزينها في متغير مؤقت. إذا كان الكود الأول لا يعمل، فقد يكون هناك خطأ في مكان آخر في البرنامج كما قلت لك، يمكنك استخدام أدوات التصحيح في Visual Studio Code لتحديد المشكلة، أما بالنسبة للفرق فلا يمكن معرفة ذلك مباشرة دون اطلاع على مشروعك وفحصه. قم بوضع نقطة توقف في الكود الأول. شغل البرنامج في وضع التصحيح. عندما يتوقف البرنامج عند نقطة التوقف، قم بفحص قيمة this.password والقيم الأخرى المتعلقة. استمر في تنفيذ البرنامج خطوة بخطوة لرؤية ما يحدث. إذا لم تتمكن من تحديد المشكل أرفق لي ملفات المشروع كي أطلع عليها. 1 اقتباس
السؤال
محمود سعداوي2
السلام عليكم.
لو تسمحوا أود معرفة الإختلاف بين الكودين التاليين.
الكود الأول:
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; });
مع العلم أن الكود الأول لم يقم بتشفير كلمة بينما الكود الثاني قام بتشفير كلمة المرور.
شكرا على المساعدة.
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.