لینکهای مفید برای شرکت در مسابقه:
در قسمت آموزشی برای حل سوالات، سه سری راهنمایی به انتهای سوالات اضافه میشود. زمان اضافه شدن راهنماییها را میتوانید در قسمت آموزشی پایین سوالات ببینید. همچنین میتوانید سوالهای خود را از بخش "سوال بپرسید" مطرح کنید.
مهارتهای لازم:
ظاهر کلی برنامه بدین صورت است:
پروژه اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
برای اجرای پروژه، باید NodeJS
و npm
را از قبل نصب کرده باشید.
auth-context
، دستور npm install
را برای نصب نیازمندیها اجرا کنید.npm start
را برای راهاندازی پروژه اجرا کنید.http://localhost:3000/
میتوانید نتیجه را ببینید.در این سوال شما باید در فایل auth-context.js
کانتکس و provider بسازید که وظیفه آن بهاشتراکگذاری کاربر و لاگین یا لاگاوت بودن آن در تمام کامپوننتها است. کامپوننتهای login
و register
را طوری کامل کنید که هنگام submit فرم موجود، اطلاعات کاربر به صورت درخواست POST به آدرس سرور مورد نظر ارسال شود. اگر درخواست فرستاده شده موفقیتآمیز بود کاربر باید در کانتکست ثبت شود و اگر ایراد داشت باید هندل شود و ارور برگشت داده شده در div با کلاس error-message نشان داده شود.
آدرس سرور برای ثبت نام:
http://localhost:8989/api/register
آدرس سرور برای لاگین:
http://localhost:8989/api/login
برای دانستن بیشتر در مورد fetch میتوانید از این لینک استفاده کنید:
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
شما تنها مجاز به اعمال تغییر در فایلهای زیر هستید:
src/context/auth-context.js
src/components/login.js
src/components/register.js
node_modules
در فایل ارسالی نباشد.در این قسمت راهنماییهای سوال، به مرور اضافه میشود. مشکلاتتان در راستای حل سوال را میتوانید از بخش "سوال بپرسید" مطرح کنید.
برای قسمت مقدار AuthProvider
نیاز به ابجکت با سه تا فیلد: user که ابجکت کاربر، login تابعی که کاربر را ثبت میکند و و logout که کاربر را null قرار میدهد. هنگام ثبتنام و لاگین بعداز ارسال درخواست تابع login از این context صدا زده میشود.
در صفحات لاگین و ثبتنام هنگام submit فرم باید یک درخواست POST بوسیله fetch به آدرس گفته شده ارسال شود. داده ارسالی یک آبجکت شامل username و password است. این username و password را میتوانید به دو صورت بگیرید. اگر از onSubmit روی فرم استفاده میکنید میتوانید از event.target.elements
بگیرید که برای مثال مقدار username به صورت event.target.elements.username.value
است یا میتوانید از استیت استفاده کنید.
نکته: مقدار value اینپوتها داخل فرمها را تغییر ندهید، نیازی به اینکار نیست و با value تستها تداخل ایجاد میکند.