Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在yii中如何发送密码重置链接_Yii_Forgot Password - Fatal编程技术网

在yii中如何发送密码重置链接

在yii中如何发送密码重置链接,yii,forgot-password,Yii,Forgot Password,在yii中,我正在创建忘记密码功能。为此用户输入电子邮件id。如果此电子邮件id正确,则我希望从数据库中检索安全问题id,并将该问题显示给用户。如果他的答案正确,则密码重置链接将发送到用户的电子邮件id。在控制器中,我已按 public function ActionForget{if(isset($_POST['email'])) { $record=User::model()->find(array( 'select'=>'primaryEmail'

在yii中,我正在创建忘记密码功能。为此用户输入电子邮件id。如果此电子邮件id正确,则我希望从数据库中检索安全问题id,并将该问题显示给用户。如果他的答案正确,则密码重置链接将发送到用户的电子邮件id。在控制器中,我已按

 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}}
public function ActionForget{if(isset($_POST['email']))
{$record=User::model()->find(数组(
'选择'=>'primaryEmail',
'条件'=>'PrimaryEmail=:email',
'params'=>array(':email'=>$\u POST['email']))
);如果($record==null){
$error='Email invalid';
}否则{
$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=“欢迎来到Balaee”;
$mailer->IsHTML(true);
$mailer->Body=“感谢您的关注
单击链接了解其他详细信息”。$url=“http://”。$\u服务器['http\u主机].$\u服务器['REQUEST\u URI']; 如果($mailer->Send()){echo“请检查邮件”;} 否则{echo“无法发送您的邮件!”;} else{$this->render('emailForm');//使用密码字段显示视图}
我有password.php作为输入主要电子邮件id和提交按钮的查看文件

     <?php $form=$this->beginWidget('CActiveForm', array(
         'id'=>'email-form',
           'enableClientValidation'=>true,
            ));
          echo CHtml::textField('email');
          echo CHtml::submitButton('Send');
          $this->endWidget();

控制器方法的名称不应该是
actionforget
而不是
actionforget
。PHP是区分大小写的,同样当你呈现页面时,用它发送模型,比如
this->render->('emailForm',$email)
其中
$email
是你的模型名

好的,我喜欢开始,下面是对上面现有代码的一些修复

但是,一旦成功发送电子邮件,您的计划是什么;看,现有的代码会给你一个url,看起来像这样,它会把你带回到你输入电子邮件的形式,从而创建一个巨大的循环

请参阅,链接实际上应该创建并验证,从而允许用户访问其用户记录。您需要一些其他函数来验证并允许更改密码

<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!");
}

公共职能{
如果(isset($_POST['email']){
$record=User::model()->findByAttributes(数组('email'=>Yii::app()->request->getPost('email'));
如果($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->密码=”P@ssWord";
$mailer->From=”yourfromemail@yourdomain.com";
$mailer->FromName=“HQ-DEV-01”;
$mailer->AddAddress($_POST['email']);
$mailer->Subject=“欢迎访问CES文档网站”;
$mailer->IsHTML(true);
$mailer->Body=“谢谢,请
单击链接了解其他详细信息 “$url=”http://“$\u服务器['http\u主机]。$\u服务器['REQUEST\u URI']; 如果($mailer->Send()){ 回音“请检查您的电子邮件”; } 否则{ echo“无法发送您的消息!”; } }否则{ 回显“电子邮件无效”; } 否则{ $this->render('password'); Yii::app()->user->setFlash('错误',“电子邮件无效!”); //回显“电子邮件无效”; } } else{$this->render('password');//显示带有密码字段的视图} Yii::app()->user->setFlash('info',“输入有效的电子邮件!”); }
}

请通过放置echo语句来调试代码,并检查控件在何处中断,然后找到问题所在。我现在正在逐步执行此操作。如果电子邮件id正确,那么我想从用户表中检索该用户的安全问题id,以便向他显示安全问题。我创建了一个查询,就好像(isset($\u POST['email']){$record=User1::model()->find(数组('select'=>'primarymail','condition'=>'primarymail=:email',params'=>array(':email'=>$\u POST['email']));If(!$record==null){echo“电子邮件存在”;$id=User1::model()->findByAttributes(数组('userId'=>$record->userId));$sqid=User1::model()->findByAttributes(数组('securityQuestionId'=>$record->securityQusetionId));echo$sqid;}bt不工作一次又一次的发帖对mam没有帮助,试着编写一些代码。谢谢。首先,尝试FindByatAttributes函数,而不是find,你只需要在那里指定数组('primaryEmail'=>Yii::app()->request->getPost('email')。另外,你可能想将if改为if($record!=NULL)相反,!$record会导致bool,并且对NULL的严格检查总是失败的。当涉及到函数/方法时,php不区分大小写。