در قسمت قبل تونستیم با استفاده از اطلاعاتی که در دیتابیس داریم به سایت وارد بشیم.
رمزی که ما ذخیره میکردیم بسیار ساده بود و در دیتابیس به همان شکل ذخیره میشد.
برای امنیت سایت و امنیت اطلاعات کاربر رمز عبور را باید رمز نگاری کنیم
با استفاده از متد های رمز نگاری مثل crypy یا sh1 و .. میتونیم اطلاعات را رمز کنیم.
نحوه ی ذخیره و استفاده از دیتای رمز شده را در این بخش بررسی میکنیم
ابتدا نحوه ی رمز کردن رمز عبور , هنگام ثبت کاربر : actionCreate() باید رمزی که وارد میشرو با استفاده از یک مقدار ثابت رمز کنیم
متد رمز شده در دیتابیس ذخیره میشه و هنگامی که عملیات بازیابی اطلاعات را انجام میدهیم userIdentity
رمز عبور کاربر را با همان مقدار ثابتی که رمز کردیم , رمز میکنیم و با مقداری که در دیتابیس ذخیره شده است مقایسه میکنیم.
در صورتی که برابر بود به این معنی است که کاربر رمز عبور را درست وارد کرده است.
خوب ابتدا در کنترلر site و در اکشن actionCreate() به نگاه اجمالی میکنیم
$model->attributes = $_POST['User'];
قبلا گفتیم که به وسیله ی این کد پارامتر های ارسالی شما به مدل به صورت اتومات اختصاص داده میشه
خوب ما ابتدا باید رمز عبور ارسال شده رو دریافت کنیم.
با استفاده از کد زیر ما رمز عبور ارسالی را دریافت میکنیم
$password = $_POST['User']['password'];
خوب من رمز ارسالی رو در متغییر password ریختم
حالا باید مقدار ثابتی که قراره باهاش رمزنگاریو انجام بدیم دریافت کنیم
$salt = $_POST['User']['email'];
من ایمیل ارسالی کاربر را به عنوان مقدار ثابت دریافت کردم.
توجه داشته باشین هر کاربری که ایجاد میشه رمز عبور ارسالیش با استفاده از ایمیلش رمز میشه
با تابع crypt عملیات رمز نگاری را انجام میدیم
$crypt = crypt($password, $salt);
الان ما رمز عبوری ارسالی را با مقدار ثابتمون رمز کردیم
حالا کاری که باید انجام بدیم اینه که این رمز ایجاد شدرو به مدلمون اختصاص بدیم
$model->password = $crypt;
با کد بالا ما رمز ایجاد شدرو در پسورد ریختیم و ذخیره میکنیم
. اکنون برین یه کاربر بسازین و در دیتابیس ببینین چه اتفاقی افتاده
من کاربری با ایمیل info@goyii.ir و رمز عبور ۱۲۳۴۵۶ ساختم
نتیجرو ببینین
خوب الان ما با نام کاربری و رمز عبوری که ساختیم اگر لاگین کنیم بهمون ارور میده
ما باید هنگامی که رمز عبور و نام کاربری رو چک میکنیم رمزنگاریو اعمال کنیم
بخش دیگه ای که باید بررسی کنیم useridentity هست
فولدر component و فایل useridentity
ما قبلا کاربر را با email , password پیدا میکردیم
حالا ابتدا ما کاربر را با ایمیل چک میکنیم
اگر کاربری وجود نداشت که ارور میدهیم
در صورتی که وجود داشت رمز عبوری که قبلا رمز کردیم را بازیابی میکنیم
بعد رمز ارسالیه کاربر را با ایمیلش رمز میکنیم
نتیجه را با چیزی که بازیابی کردیم مقایسه میکنیم
در صورتی که برابر بودند کاربر احراز هویت شده درصورتی که برابر نبودند که پیام مناسب را میدیم
کد زیر حاصل کار ماست
public function authenticate() {
$users = User::model()->findByAttributes(array('email' => $this->username));
$password = $users->password;
$salt = $users->email;
$hash = crypt($this->password, $salt);
if (!isset($users))
$this->errorCode = self::ERROR_USERNAME_INVALID;
elseif ($password !== $hash)
$this->errorCode = self::ERROR_PASSWORD_INVALID;
else
$this->errorCode = self::ERROR_NONE;
return !$this->errorCode;
}
حالا به راحتی میتونین وارد سایت شوید با امنیت رمز عبور