سلام دوست عزیز😃👋
به مسابقه «ورودی بوتکمپ کداستار - Frontend» خوش آمدی!
لینکهای مفید برای شرکت در مسابقه
هرگونه ارتباط با سایر شرکتکنندگان و یا استفاده از ابزارهای تولید کد، مثل chatGPT و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکتکنندگان مسابقه حذف میشوید.
در طول مسابقه، میتوانید سؤالات خود را از قسمت «سوال بپرسید» مطرح کنید.
موفق باشید 😉✌
فایل پروژه را میتوانید از طریق این این لینک دانلود کنید.
ساختار پروژه به شکل زیر است:
app.js
🔗Validation
و در پایین آن تابعی با نام isAuthentication
وجود دارد که شما باید آن را طوری کامل کنید که بررسی کند کاربر احراز هویت (authentication) را انجام داده است یا خیر.
پس باید مقداری را بر اساس مقادیر موجود در لوکالاستورج به ما برگرداند.registerUser
:🔗user
است که باید دارای سه مقدار باشد: username
، password
و role
.username
را پاکسازی و استاندارد میکنیم تا مقایسهای دقیق و یکسان برای بررسی تکراری بودن انجام شود.localStorage
خوانده میشود و در آرایهای به نام users
قرار میگیرد. اگر مقدار موجود در localStorage
آرایه نبود یا خطایی رخ داد، آرایه خالی در نظر گرفته میشود.username
(پس از پاکسازی) قبلاً ثبت شده یا خیر. اگر چنین کاربری وجود داشت، عملیات با پیام زیر رد میشود:
"این نام کاربری قبلاً ثبت شده. لطفاً نام دیگری انتخاب کنید."username
، password
و role
) به آرایه users
اضافه میشود.localStorage
ذخیره میشود. در صورتی که عملیات ذخیرهسازی با خطا مواجه شود، تابع با پیام زیر رد میشود:"خطا در ذخیرهسازی. دوباره تلاش کنید."
loginUser
🔗creds
است که شامل مقادیر username
و password
از loginForm
میباشد.accessToken
، refreshToken
و role
را بازمیگرداند. این مقادیر باید در localStorage
ذخیره شوند.registerUser
)، در ابتدا باید username
را پالایش کنید (حذف فاصلهها و تبدیل به حروف کوچک). سپس لیست کاربران (users
) از localStorage
خوانده میشود. در صورت بروز خطا یا نبود لیست معتبر، یک آرایه خالی جایگزین میشود.username
برابر و password
منطبق وجود دارد یا خیر. اگر چنین کاربری یافت نشد، reject
با پیام زیر صدا زده میشود و تابع خاتمه مییابد:
"نام کاربری یا رمز عبور اشتباه است."accessToken
و refreshToken
را با این فرمت تولید کنید:role
کاربر، در localStorage
ذخیره میشوند.try/catch
انجام شود. در صورت بروز خطا هنگام ذخیرهسازی، تابع با reject
و پیام زیر خاتمه مییابد:
"خطا در فرآیند ورود. دوباره تلاش کنید."resolve
فراخوانی میشود و آبجکت زیر بازگردانده میشود:loginUsername
) و رمز عبور (loginPassword
) از عناصر HTML دریافت میشوند.showToast
نمایش داده شده و ادامهی اجرای تابع متوقف میشود.username
و password
ساخته شده و به تابع loginUser
ارسال میشود.showToast
نمایش داده میشود و پس از گذشت یک ثانیه کاربر به صفحهی dashboard.html
هدایت میشود.showToast(err, "error")
نمایش داده میشود.فرایند ثبتنام بسیار مشابه ورود است با تفاوتهایی جزئی:
registerUsername
)، رمز عبور (registerPassword
) و نقش (role
) از عناصر HTML گرفته میشوند.username
، password
و role
ساخته میشود و به تابع registerUser
ارسال میگردد.login.html
منتقل میشود.showToast(err, "error")
نمایش داده خواهد شد.accessToken
، refreshToken
و role
از localStorage
خوانده میشوند.index.html
) هدایت شود.role
، محتوای مناسب برای داشبورد انتخاب و در عنصر dashboard-content
نمایش داده میشود:admin
باشد، محتوای مدیریتی (adminContent
) نمایش داده میشود.userContent
) قرار داده خواهد شد.logout-btn
پیدا میشود. در صورتی که وجود داشته باشد، یک رویداد کلیک برای آن تعریف میشود که هنگام کلیک:accessToken
، refreshToken
و role
را از localStorage
حذف میکند.index.html
) بازمیگرداند.برای هدایت صحیح کاربر به صفحات مجاز، بر اساس مسیر فعلی و وضعیت احراز هویت، شرایط زیر بررسی میشود:
dashboard.html
باشد ولی احراز هویت نشده باشد، باید به صفحهی login.html
منتقل شود.login.html
یا register.html
باشد ولی قبلاً احراز هویت شده باشد، باید مستقیماً به صفحهی dashboard.html
منتقل شود.index.html
یا ریشه /
) باشد:login.html
) منتقل میشود.هدف از این کنترلها، جلوگیری از دسترسی غیرمجاز به بخشهای محافظتشدهی سایت و همچنین جلوگیری از ورود کاربران لاگینشده به صفحات ورود و ثبتنام است. این کار تجربهی کاربری را بهبود میدهد و ساختار امنیتی سمت کلاینت را تقویت میکند.
app.js
متصل هستند.فایلی که آپلود خواهید کرد باید دارای فرمت .Zip باشد و دارای ساختار زیر باشد:
موفق باشید 🌟