PDA

View Full Version : هش کردن پسورد



SeyedMoosavi
یک شنبه 13 اردیبهشت 1394, 17:14 عصر
سلام خدمت استادان ارجمند
می دونم سوالی که می خوام بپرسم خیلی ابتدایی هست
من آموزش Yii آقای شهرکی رو خریدم و دارم مطالعه می کنم ولی چون تا الان همینجوری درهم برهم کد می زدم برام درک MVC یکم سخت بود که اون رو هم با مطالعه یه چیزیایی ازش فهمیدم
الان من یه سوال برام پیش اومده اونم این هست که من وقتی اطلاعات رو می خوام داخل بانک داده بریزم هرچی کاربر وارد فیلدها کرده ذخیره میشه حالا اگه من بخوام یه فیلدی رو تغییر بدم مثلا پسورد رو بخوام هش شدش رو بریزم داخل فیلد مربوطه باید چیکار کنم؟
اینم بگم با هش کردن پسورد مشکلی ندارم کدی مه من نوشتم رو میزارم


public function actionCreate() {
$model = new Users;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if (isset($_POST['Users'])) {
$model->IsActive=0;
$model->LastChangePasswword=null;
$model->Password=CPasswordHelper::hashPassword($model->Password);
$model->CreateDate= date("Ymd");
$model->attributes = $_POST['Users'];
$model->ConfirmingUser_ID=null;
$model->lastlogindates=null;
if ($model->save())
$this->redirect(array('view', 'id' => $model->id));
}


$this->render('create', array('model' => $model,
));


دلیل اینکه بعضی فیلدها رو تغییر دادم مهم نیست و دقت کنید معلومه ولی فیلد پسورد رو با اینکه کدهش رو نوشتم براش ولی بازم همون پسورد رو که کاربر نوشته وارد می کنه نه هش شدش رو
میدونم سوالم خیلی ابتدایی هست ولی ممنون میشم جواب بدید
ویرایش:
الان من متوجه شدم فیلدهایی که داخل View هستن رو نمیتونم اینجا به این صورت که تغییر دادم تغییر بدم مثلا چون پسورد رو خود کاربر وارد میکنه این کدی که من نوشتم دیگه کار نمی کنه ولی وقتی از داخل View فیلد پسورد رو حذف کردم و کاربر نتونست دیگه وارد کنه کد من کار کرد البته به جای کد بالا کد زیر رو نوشتم

$model->Password=CPasswordHelper::hashPassword("12345678");
الان من باید چیکار کنم که وقتی کاربر توی فیلد ها یه چیزی مینویسه من بتونم روش یه تغییراتی ایجاد کنم و بعدش تو دیتابیس ذخیره کنم؟

با تشکر از عزیزان

FastCode
یک شنبه 13 اردیبهشت 1394, 18:07 عصر
اختمالا مشکل در $model->save() هست.فکر میکنم این قسمت کدتون درسته.

engmmrj
یک شنبه 13 اردیبهشت 1394, 20:54 عصر
مشکل شما اینکه اومدین مقدار password رو هش کردین بعد باز دوباره اومدین فیلد ها رو مقدار دهی کردین ُ کدتون رو به صورت زیر ویرایش کردم.

public function actionCreate() {
$model = new Users;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if (isset($_POST['Users'])) {
$model->attributes = $_POST['Users'];
$model->IsActive=0;
$model->LastChangePasswword=null;
$model->Password=CPasswordHelper::hashPassword($model->Password);
$model->CreateDate= date("Ymd");

$model->ConfirmingUser_ID=null;
$model->lastlogindates=null;
if ($model->save())
$this->redirect(array('view', 'id' => $model->id));
}


$this->render('create', array('model' => $model,
));
و اما برای اینکه بتوایند داده هایی که از کاربر میگیرید را تغییر بدید میتونید از beforeSave میتونی استفاده کنی یا قبل save کردن model که خودتون انجام دادید یا afterValidate یا beforeValidate


public function beforeSave(){
if($this->isNewRecord)
{
$this->password = md5($this->password);
}
return parent::beforeSave()
}