В yii как отправить ссылку для сброса пароля
В yii я создаю функцию "забыть пароль". Для этого пользователя вводится идентификатор электронной почты. Если этот идентификатор электронной почты правильный, то я хочу получить идентификатор securityQuestion из базы данных и отобразить этот вопрос пользователю. Если его ответ правильный, тогда ссылка для сброса пароля будет отправлена на электронный адрес пользователя. В контроллере я сделал действие как
public function ActionForget{if(isset($_POST['email']))
{ $record=User::model()->find(array(
'select'=>'primaryEmail',
'condition'=>'PrimaryEmail=:email',
'params'=>array(':email'=>$_POST['email']))
); if($record===null) {
$error = 'Email invalid';
} else {
$mailer = Yii::createComponent('application.extensions.mailer.EMailer');
$mailer->IsSMTP();
$mailer->IsHTML(true);
$mailer->SMTPAuth = true;
$mailer->SMTPSecure = "ssl";
$mailer->Host = "smtp.gmail.com";
$mailer->Port = 465;
$mailer->CharSet = 'UTF-8';
$mailer->Username = "abc@shailani.com";
$mailer->Password = "abc";
$mailer->From = "xyz@shailani.com";
$mailer->FromName = "Balaee.com";
$mailer->AddAddress($record);
$mailer->Subject = "welcome to Balaee";
$mailer->IsHTML(true);
$mailer->Body = "<h1>Thanks to showing interest </h1><br>click on link for other detail ".$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if($mailer->Send()) {echo "Please check mail";}
else {echo "Fail to send your message!"; }}}
else{ $this->render('emailForm'); //show the view with the password field}}
У меня есть password.php в качестве файла просмотра для ввода основного идентификатора электронной почты и кнопки отправки
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'email-form',
'enableClientValidation'=>true,
));
echo CHtml::textField('email');
echo CHtml::submitButton('Send');
$this->endWidget();
Но после отправки первичного идентификатора электронной почты пользователем никаких действий не происходит. Так что, пожалуйста, кто-нибудь может сказать, какие изменения мне нужно сделать
2 ответа
Не должно ли имя метода контроллера actionForgot
вместо ActionForgot
, PHP чувствителен к регистру, также когда вы рендерите страницу, отправьте модель с ней как this->render->('emailForm',$email)
где $email
это твоя модель
Хорошо, мне нравится начало, и вот некоторые из исправлений существующего кода выше.
Однако каков был ваш план, как только вы успешно отправили электронное письмо; увидеть, что существующий код получает вам URL, который выглядит следующим образом: http://yoursite.com/yourapp/user/forget и который вернет вас обратно к форме, в которой вы вводите свою электронную почту, создавая таким образом гигантский цикл.
Посмотрите, что ссылка должна фактически быть подтверждена и таким образом предоставляя пользователю доступ к его пользовательской записи. Вам нужна другая функция для проверки и разрешения смены пароля.
<code>
public function actionForget() {
if(isset($_POST['email'])) {
$record=User::model()->findByAttributes(array('email' => Yii::app()->request->getPost('email')));
if ($record != NULL) {
$mailer = Yii::createComponent('application.extensions.mailer.EMailer');
$mailer->IsSMTP();
$mailer->IsHTML(true);
$mailer->SMTPAuth = true;
$mailer->SMTPSecure = "ssl";
$mailer->Host = "smtp.gmail.com";
$mailer->Port = 465;
$mailer->CharSet = 'UTF-8';
$mailer->Username = "yourgmailacccount@gmail.com";
$mailer->Password = "P@ssWord";
$mailer->From = "yourfromemail@yourdomain.com";
$mailer->FromName = "HQ-DEV-01";
$mailer->AddAddress($_POST['email']);
$mailer->Subject = "welcome to CES Document Site";
$mailer->IsHTML(true);
$mailer->Body = "<h1>Thanks, please</h1><br>
click on link for other detail
".$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if($mailer->Send()) {
echo "Please check your email";
}
else {
echo "Fail to send your message!";
}
} else {
echo 'Email invalid';
}
else {
$this->render('password');
Yii::app()->user->setFlash('error', "Email is not valid!");
//echo 'Email invalid';
}
}
else{ $this->render('password'); //show the view with the password field}}
Yii::app()->user->setFlash('info', "Enter a valid e-mail!");
}
}