خب توی این پست میریم که راجع به register و login صحبت کنیم.
برای Register یک فرم داریم مثل فرم بالا (بسته به نیاز برنامه فیلدها فرق دارد).
روش register کردن پست ما دقیقا مثل create کردن و هیچ فرقی نداره اما یک نکته داره:
ما دیتای مهمی مثل password رو هیچوقت همینطور ساده ذخیره نمیکنیم (یعنی اگه password ما 12345678 هست دقیقا همین مقدار رو ذخیره نمیکنیم و داده باید hash شده باشد).
برای اینکار یک راه داریم. داده ی ورودی رو میگیریم و توی یک متغیر میریزیم بعد با استفاده از متد password_hash مقدار رو به hash تبدیل میکنیم.
$password=password_hash($password,PASSWORD_DEFAULT);
فانکشن password_hash یک فانکشن یک طرفه برای تولید password جدید است.
یک سری الگوریتم هستن که توسط فانکشن hash_password , ساپورت میشوند. یکی از آنها PASSWORD_DEFAULT است. این الگوریتم از الگوریتم bcrypt استفاده میکند و هر دفعه یک password جدید و قوی تولید میکند و داده ای که توی دیتابیس ذخیره بشه شبیه اینه
$2y$10$ID3lq36jP7NL/oyQyMz8ZeUB4FBFSENl9fng1F/5ALFrxhO1rOY8y
همین.
برای login یک فرم داریم مثل فرم بالا که اطلاعات رو میگیریم. مثل register اول داده های ورودی رو validate میکنیم. سپس بررسی میکنیم که آیا داده ای با این مشخصات توی دیتابیس داریم یا نه. اگه نبود که خطا میدهد و اگر بود که وارد وبسایت میشیم.
اطلاعات رو میگیریم توی کنترلر و بعد میفرستیم به متد login توی model.
توی متد Login اول چک میکنه که آیا همچین user داریم یا نه اگر نبود false برمیگرداند.
اما اگه کاربر پیدا شد مقدار password ذخیره شده رو میگیریم و چک میکنیم که آیا password با مقدار ورودی برابر است یا خیر. اگر نبود false برمیگردانیم.
نکته:
همونطور که بالاتر گفتیم password توی دیتابیس hash شده هست و برای اینکه داده ی ورودی که خام هست رو با این مقدار hash شده مقایسه کنیم از متد password_verify استفاده میکنیم.
کد کامل قسمت login توی model:
توی کنترلر وقتی که login موفقیت آمیز بود بهتر چندتا سشن set کنیم برای قابلیت هایی که فقط اعضای سایت بهش دسترسی دارن.
$this->session->set('username',$login->name); $this->session->set('LogIn',true);
تمام.