تکمیل فرآیند Login و Logout

PHP Login Logout Code

0 94

تکمیل فرآیند Login

در جلسه ی قبل کار ساخت flash message ها را تمام کردیم. حالا باید کدنویسی فرآیند ثبت نام را انجام دهیم. اگر یادتان باشد در کدنویسی فرآیند ثبت نام از کدی استفاده کردیم که ایمیل وارد شده را در پایگاه داده چک می کرد تا تکراری نباشد. برای ورود نیز می توانیم از همان کدها استفاده کنیم تا ببینیم ایمیل وارد شده برای login اصلا وجود دارد (قبلا ثبت نام شده) یا خیر.

از پوشه ی controllers وارد فایل Users.php شوید. می خواهیم پایین تر از کدهای Validate password کدهای بررسی ایمیل را می نویسیم. کدهای Validate password به این شکل بودند:

مشاهده این قسمت تنها برای افرادی که اشتراک جادویی داشته باشند، امکان‌پذیر است. با خرید اشتراک، به همه مطالب جادویی روکسوپلاس دسترسی داشته باشید.

این تابع ایمیل وارد شده را بررسی می کند تا مطمئن شود وجود دارد (در جلسات قبلی مربوط به register توضیح داده شد). اگر در حال حاضر به صفحه ی localhost/shareposts/users/login بروید و با ایمیلی که در پایگاه داده وجود ندارد login شوید به شما پیام No user found نمایش داده می شود.

بر اساس این کد اگر کاربر پیدا شود پیام خطا برای email_err تنظیم نمی شود و فرآیند ورود ادامه پیدا می کند بنابراین به قسمت پایین تر (کامنت Make sure errors are empty) بروید. کدهای این قسمت تا این لحظه به شکل زیر بودند:

مشاهده این قسمت تنها برای افرادی که اشتراک جادویی داشته باشند، امکان‌پذیر است. با خرید اشتراک، به همه مطالب جادویی روکسوپلاس دسترسی داشته باشید.

ما باید آن را تغییر دهیم تا به جای نمایش پیام SUCCESS فرآیند واقعی اتفاق بیفتد. ابتدا ('die('SUCCESS را حذف کنید. برای login کردن کاربر از یک model استفاده می کنیم و آن را درون یک متغیر به نام loggedInUser قرار می دهیم:

مشاهده این قسمت تنها برای افرادی که اشتراک جادویی داشته باشند، امکان‌پذیر است. با خرید اشتراک، به همه مطالب جادویی روکسوپلاس دسترسی داشته باشید.

این متد ایمیل و رمز عبور مورد نظر ما را می گیرد. سپس کوئری ما به دنبال ایمیل وارد شده می گردد و از آنجایی که هر کاربر فقط می تواند از یک ایمیل استفاده کند از متد ()single برای دریافت این ردیف استفاده می کنیم. سپس متغیری به نام hashed_password ایجاد کرده و ستون password از ردیف برگردانده شده را دریافت می کنیم. این password به صورت هش شده در پایگاه داده قرار دارد.

سپس از یک تابع PHP به نام ()password_verify استفاده کرده ایم. این تابع رمز عبور هش نشده (از سمت فرم) را میگیرد و آن را هش می کند و سپس با مقدار هش شده در پایگاه داده مقایسه می کند. اگر یکی بودند یعنی رمز عبور صحیح است و true برگردانده می شود.

حالا اگر به controller برگردید (فایل Users.php) متوجه می شوید که متغیر loggedInUser  یا ردیف row را دریافت می کند یا false. به همین دلیل است که در خط بعدی آن را در شرط if گذاشته ایم:

مشاهده این قسمت تنها برای افرادی که اشتراک جادویی داشته باشند، امکان‌پذیر است. با خرید اشتراک، به همه مطالب جادویی روکسوپلاس دسترسی داشته باشید.

بنابراین اگر false نباشد باید session های مربوطه را ایجاد کنیم در غیر این صورت صفحه ی login را با خطای مورد نظر برگردانیم. برای تست کردن می توانید از یک پیام مانند ('die ('SUCCESS استفاده کنید.

حالا باید به جای کامنت Create Session (یا دستور ('die ('SUCCESS) واقعا session های login را بسازیم. می توانیم این کار را مستقیما همینجا انجام دهیم اما من ترجیح می دهم که یک متد جداگانه به نام createUserSession برایش تعریف کنیم بنابراین فعلا می نویسیم:

مشاهده این قسمت تنها برای افرادی که اشتراک جادویی داشته باشند، امکان‌پذیر است. با خرید اشتراک، به همه مطالب جادویی روکسوپلاس دسترسی داشته باشید.

در دستوراتی مانند user->id$ متغیر user$ از همان تابع ()login می آید. حتما یادتان هست که این تابع یک متغیر به نام row$ را برمی گرداند که حاوی یک ردیف از پایگاه داده بود. این ردیف شامل id و email و دیگر ستون های پایگاه داده است و این id از آن ردیف گرفته می شود. به همین شکل id و name و email را از آن ردیف گرفته ایم و در آخر کاربر را موقتا به صفحه ی index منتقل می کنیم.

حالا برای تست کدهایمان و فرآیند login بهتر است navbar را ویرایش کنیم. حتما دیده اید زمانی که کاربری وارد سایت می شود دیگر گزینه ی های login و register برایش نمایش داده نمی شود. بنابراین به فایل navbar.php رفته و بعد از خط 18 (عنصر <ul>) کدها را بدین شکل ویرایش کنید:

مشاهده این قسمت تنها برای افرادی که اشتراک جادویی داشته باشند، امکان‌پذیر است. با خرید اشتراک، به همه مطالب جادویی روکسوپلاس دسترسی داشته باشید.

در حال حاضر اگر به صفحه ی اول سایت برویم و login باشیم نباید هیچ چیزی برایمان نمایش داده شود و اگر login نباشیم نیز باید گزینه های login و register را ببینیم. الان که login هستیم و برای تست به صفحه ی localhost/shareposts/pages/index برویم هیچ کدام از این گزینه ها دیده نمی شوند.

اما بهتر است کار دیگری انجام دهیم. یکی از <li> های موجود را در قسمت if کپی کنید تا گزینه ی logout برای کاربران وارد شده نمایش داده شود:

مشاهده این قسمت تنها برای افرادی که اشتراک جادویی داشته باشند، امکان‌پذیر است. با خرید اشتراک، به همه مطالب جادویی روکسوپلاس دسترسی داشته باشید.

البته این گزینه فعلا کاری انجام نمی دهد، چرا که هنوز کدهای آن را ننوشته ایم. به فایل Users.php برگردید و پایین تر از تابع createUserSession تابع logout را نیز تعریف کنید. خروج یا logout کردن هیچ کار خاصی نمیخواهد بلکه کافی است session ها را حذف کنید:

نکته: دستور session_destroy را برای محکم کاری اضافه کرده ایم تا اگر Session دیگری باقی مانده بود آن ها را نیز حذف کند.

حالا می توانید به راحتی این فرآیند را تست کنید تا از صحت عملکرد آن مطمئن شوید.

یک تابع دیگر به نام isLoggedIn نیز باید بسازیم:

این تابع مشخص می کند که کاربر login شده یا هنوز وارد حساب خود نشده است. از این تابع بعد ها استفاده خواهیم کرد.

مشاهده این قسمت تنها برای افرادی که اشتراک جادویی داشته باشند، امکان‌پذیر است. با خرید اشتراک، به همه مطالب جادویی روکسوپلاس دسترسی داشته باشید.

امیدوارم از این قسمت لذت برده باشید. در قسمت های بعدی وارد مبحث گذاشتن پست و ویرایش آن و… صحبت خواهیم کرد.

ترتیبی که روکسو برای یادگیری مطالب سری آموزش ساخت شبکه اجتماعی به شما توصیه می‌کند:

ارسال نظر

توجه:‌ آدرس ایمیل شما منتشر نخواهد شد.