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