Написал регистрацию, где ввод только емайла и логина, пароль генерируется автоматом и высылается на эмайл.
Соль хранится у в таблице, для каждого пользователя индивидуальная)
Сейчас написал восстановление пароля, где высылается ссылка с id и md5(соль)
Ссылки на эмайл приходят такие site.ru/restore/id/md5(salt)
Сам Экшен восстановления:
Код: Выделить всё
public function actionRestore_password()
{
$model = new User('restore_password');
if(!empty($_GET['id']) && !empty($_GET['restore']))
{
$user = User::model()->findByAttributes(array('id'=>$_GET['id']));
if($user != null && md5($user['salt']) == $_GET['restore']){
$randomPass = User::model()->randomPass();
$model = User::model()->findByPk($user['id']);
$model->password = User::model()->hashPassword($randomPass, $user['salt']);
if($model->save(false)){
$message = new YiiMailMessage;
$message->view = 'change_password';
$message->setBody(array('login'=> $user['login'], 'password'=>$randomPass, 'host'=>Yii::app()->params['host'], 'host_name'=>Yii::app()->params['host_name']), 'text/html');
$message->addTo($user->email);
$message->setSubject(Yii::app()->params['email_restore_password_subject']);
$message->from = Yii::app()->params['email_no-reply'];
Yii::app()->mail->send($message);
Yii::app()->user->setFlash('success', '<strong>Success!</strong> Your password has been successfully changed and sent to you by e-mail.');
Yii::app()->user->setState('login', $user['login']);
$this->redirect(array('user/login'));
}
}
}
if(!empty($_POST['User'])){
$model->attributes = $_POST['User'];
$user = User::model()->findByAttributes(array('email'=>$model->email));
if($model->validate()){
if($user == null){
Yii::app()->user->setFlash('error', '<strong>Error!</strong> No such user exists.');
}
else{
$message = new YiiMailMessage;
$message->view = 'restore_password';
$message->setBody(array('login'=> $user['login'], 'id'=>$user['id'], 'link'=>md5($user['salt']), 'host'=>Yii::app()->params['host'], 'host_name'=>Yii::app()->params['host_name']), 'text/html');
$message->addTo($model->email);
$message->setSubject(Yii::app()->params['email_restore_password_subject']);
$message->from = Yii::app()->params['email_no-reply'];
Yii::app()->mail->send($message);
Yii::app()->user->setFlash('success', '<strong>Success!</strong> Recovery information sent to you by e-mail.');
}
}
}
$this->render('restore_password', array(
'model' => $model,
));
}
и как лучше получать гет, просто $_GET или Yii:app()->getRequest()->getQuery();
PS просто учусь и хочу сделать все по уму.