آموزش جاوااسکریپت › انجمن ها › Nodejs › مشکل در قسمت 17
برچسب ها: forget password, reset Password, فراموشی رمز عبور, قسمت 17
- این موضوع 11 پاسخ، 2 کاربر را دارد و آخرین بار در 3 سال، 5 ماه پیش بدست MR.Mostafa بهروزرسانی شده است.
-
نویسندهنوشتهها
-
MR.Mostafaمشارکت کننده
سلام
توی این قسمت چرا توی کدها یک دفعه تغییر ایجاد شد؟
اسم بعضی از متدها رو هم تغییر داده بودید. این روش اصلا مناسب نیست.
همچنین توی این قسمت به یک مشکل خوردم و عملیات فراموشی رمز عبور انجام نمیشه.
وقتی فرم سند میشه با این ارور مواجه میشم:
Cannot POST /auth/password/email
همچنین فیلد کپجا هم کار نمیکنه
ممنون میشم بررسی بفرمایید و مشکل هایی که وجود داره رو بفرمایید.
لینک دانلود پروژه:
http://yekupload.ir/cf3cd2543e9aed3d/reactapp-nodeJS-part17.zip
MR.Mostafaمشارکت کنندهمشکل برطرف شد.
مشکل اولی اشتباه از سمت خودم بود و آدرس route رو به درستی تغییر نداده بودم.
دومی هم فکر میکنم مشکل از طرف شما بود، چون توی متد post شما متد resetLinkProcess رو از کنترلر ForgetPasswordController فراخوانی کردید، در حالی که باید passwordResetLink فراخوانی میشد. (که عملیات کپچا روی این متد داره بررسی میشه)MR.Mostafaمشارکت کنندهتوی همین قسمت یک مشکل دیگه هم که وجود داره اینه که فیلد use از کالکشن passwordresets به درستی true نمیشه. (وقتی از توکن استفاده میکنیم)
البته جناب کیانی به این موضوع اشاره کردن و به صورت دستی از دیتابیس این فیلد رو true کردن و وقتی مجدد تست کردن، چون لاگین بودن عمل ریدایرکت انجام شد.
که این عمل ریدایرک به خاطر لاگین بودنش بود و نه به خاطر اینکه فیلد use مقدارش true شده بود.MR.Mostafaمشارکت کنندهیکسری ایرادات دیگه هم داره
کلا این قسمت اصلا خوب نبود.علیمشارکت کنندهسلام
دلیل اینکه عناوین برخی متودها عوض شده برمی گرده به جلسه 10 که captcha رو پیاده سازی کردیم و کاملا تو این قسمت توضیح دادم و ویدیو مجددا ضبط شده و شاید تفاوت متودها دلیلش این باشه و در رابطه با مشکل دومی که داشتین (use) بله تو این جلسه متوجه این مشکل نشدم که البته تو جلسات بعد از این بهش اشاره شده و برطرف شده. ممنون از توجهتون به ارورهایی که گاه بی گاه ممکن داخل دوره اتفاق افتاده باشه و من متوجهشون نشده باشم.MR.Mostafaمشارکت کنندهمشکل رو پیدا کردم.
مشکل اول اینه که در فایل resetPasswordController متد resetPassword، موقعی که ایمیل و توکن رو دارید پیدا میکنید، از await استفاده نکردید، به خاطر همین همیشه undifinded برمیگردونه. در نتیجه در همه حال پسورد تغییر میکنه. حتی اگر توکن صحیح نباشد.
مشکل دوم هم این هست (توی همون فایل) که شما وقتی دارید اطلاعات رو از دیتابیس میخونید، توکن رو از req.body.token دریافت میکنید. در صورتی که توی ریکوئست ما همچین فیلدی وجود نداره. برای رفع این مشکل من یک input:hidden ساختم و و مقدار توکن رو به این فیلد دادم. درنتیجه وقتی کاربر submit میکنه، توکن رو از سمت بک میتونم دریافت کنم و مشکل برطرف میشه.علیمشارکت کنندهبرای تمامی فرآیندهایی که دیتابیس رو درگیر میکنه از async/await باید استفاده کنیم از طرفی در رابطه با req.body.token باید بگم که با توجه به route که تعریف کردیم باید از req.params.token استفاده کنیم و در این صورت نیازی به تعریف input نیست
MR.Mostafaمشارکت کنندهاتفاقا از req.params.token استفاده کردم، ولی وقتی لاگ گرفتم این رو هم undefined برمیگردوند. (خودم هم دنبال راهی غیر از input:hidden بودم ولی پیدا نکردم)
چیزی که من خودم متوجه شدم، به این علت به req.params.token دسترسی نداریم، چون آدرس روتر get و post مون فرق میکنه. req.params.token در متد get روتر هست، اینو چطوری باید بفرستیم برای متد post که آدرسش فرق میکنه؟
اگر امکانش هست ممنون میشم این مورد رو بیشتر توضیح بدید.MR.Mostafaمشارکت کنندهجناب کیانی در خصوص req.params.token بنده همچنان منتظر پاسختون هستم.
علیمشارکت کنندهشما اگر post(…/:token) به این صورت تعریف می کنید که از input:hidden استفاده کنید و اگر از get(…/:token ) استفاده می کنید که req.params.token جواب میده و تست کردم و مشکلی نداشت زمانی که حتی شما متود get و برای route در نظر میگیرین میتونید با req.params.token این token رو دریافت و برای فرم ارسال و درنهایت توی value یک input:hidden قرار بدین و درنهایت با دستور req.body.token اون رو دریافت و عملیات مورد نظر رو انجام بدین.
علیمشارکت کنندهتغییرات و روی پروژه دادم و به جیمیلتون ارسال کردم چک بفرمایید
MR.Mostafaمشارکت کنندهممنونم از لطفتون و وقتی که گذاشتید.
-
نویسندهنوشتهها