忘记密码自定义忘记yii中的密码

忘记密码自定义忘记yii中的密码,yii,Yii,我对YII框架非常陌生。我想在登录表单中添加“忘记密码”。当用户点击它时,系统将从数据库中获取该用户的电子邮件地址,并通过电子邮件向该用户发送新密码。我不想为此使用任何插件 这是我的链接代码:- <?php echo CHtml::Link(Yii::t('job','Forgot Password ?'), $this->createUrl('site/forgotpassword'),

我对YII框架非常陌生。我想在登录表单中添加“忘记密码”。当用户点击它时,系统将从数据库中获取该用户的电子邮件地址,并通过电子邮件向该用户发送新密码。我不想为此使用任何插件

这是我的链接代码:-

        <?php echo CHtml::Link(Yii::t('job','Forgot Password ?'),
                                $this->createUrl('site/forgotpassword'),
                                array(
                                    'onclick'=>'$("#jobDialog").dialog("open"); return false;',
                                    'update'=>'#jobDialog'
                                ),
                                array('id'=>'showJobDialog'));?>
<div id="jobDialog"></div>
这是我的createdialog.php:-

<?php 

$this->beginWidget('zii.widgets.jui.CJuiDialog',array(
                'id'=>'jobDialog',
                'options'=>array(
                    'title'=>Yii::t('job','Fogot Password ?'),
                    'autoOpen'=>true,
                    'modal'=>'true',
                    'width'=>'auto',
                    'height'=>'auto',
                ),
                ));
echo $this->renderPartial('_formDialog', array('model'=>$model)); ?>
<?php $this->endWidget('zii.widgets.jui.CJuiDialog');?>

这是my_formDialog.php

<div class="form" id="jobDialogForm">
 <style type="text/css">
.forgot_password{
    background: none repeat scroll 0 0 #FFFFFF;
    border: 1px solid #DDDDDD;
    border-radius: 3px;
    font-family: Tahoma,Arial,Helvetica,sans-serif;
    font-size: 11px;
    padding: 5px 3px;
    width:70%;
}
label{
    color: #575757;
    display: block;
    font-size: 12px;
    font-weight: bold;
    margin: 0 0 5px;
    padding: 0 0 0 3px;
    }
</style>
<?php $form=$this->beginWidget('CActiveForm', array(
                                            'id'=>'job-form',
                                            'enableAjaxValidation'=>true,
                                )); 
//I have enableAjaxValidation set to true so i can validate on the fly the
?>
    <p class="note">Fields with <span class="required">*</span> are required.</p>
    <!---flash message start------>
<?php if(Yii::app()->user->hasFlash('error')):?>
        <div class="alert alert-error">
                <?php echo Yii::app()->user->getFlash('error'); ?>
        </div>
<?php endif; ?>
<!----flash message end----->
    <?php echo $form->errorSummary($model); ?>
    <div class="row">
        <?php echo $form->labelEx($model,'email'); ?>
        <?php echo $form->textField($model,'email',array('size'=>60,'maxlength'=>180,'class'=>'forgot_password')); ?>
        <?php echo $form->error($model,'email'); ?>
    </div>

    <div class="row buttons">
        <?php echo CHtml::ajaxSubmitButton(Yii::t('job','Submit'),CHtml::normalizeUrl(array('site/forgotpassword1','render'=>false)),array('success'=>'js: function(data) {
                        $("#jobDialog").dialog("close");
                    }'),array('id'=>'closeJobDialog','onclick'=>'return forgotpassword()')); ?>
    </div>

<?php $this->endWidget(); ?>

</div>
<script type="text/javascript">
function forgotpassword()
    {
        var email           = $("#User_email").val();
        if(email=='')
        { 
            $("#errorEmail").remove();
             $('#User_email').after('<div class="errorMessage" id="errorEmail">Email should not be blank.</div>');
             return false;
        }
        else
        {
            $("#errorEmail").remove();
        }

    }
</script>

.忘记密码{
背景:无重复滚动0 0#FFFFFF;
边框:1px实心#DDDDDD;
边界半径:3px;
字体系列:塔荷马字体、Arial字体、Helvetica字体、无衬线字体;
字体大小:11px;
填充物:5px 3px;
宽度:70%;
}
标签{
颜色:#575757;
显示:块;
字体大小:12px;
字体大小:粗体;
利润率:0.05倍;
填充:0 3px;
}

带*的字段是必需的


把这个放进你的控制器里

private function randomPassword() {
    $alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
    $pass = array(); //remember to declare $pass as an array
    $alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
    for ($i = 0; $i < 8; $i++) {
        $n = rand(0, $alphaLength);
        $pass[] = $alphabet[$n];
    }
    return implode($pass); //turn the array into a string
}

public function actionForgotPassword($email) {
    $user = User::model()->findAll('email=:email',
                array('email'=>$email);

    if(count($user) != 1) {
        Yii::app()->user->setFlash('user',
            Yii::t('messages', 'Unable to find user.'));
        );
        $this->refresh();
    }
    else {
        $user = $user[0];
        $user->password = $this->randomPassword();
        $user->update();

        // Send new password to email
        $from = 'Password Reset <admin@yoursite.com>';
        $to = $user->email;
        $name = $user->firstname.' '.$user->lastname;
        $subject = 'Reset Password';

        $message = Yii::t('user', 'Dear').' '.$user->username.',
'.Yii::t('user', 'A request has been made to reset your password.').'
'.Yii::t('user', 'Your new password is').': '.$user->password.'
'; // Our message above

        $headers = 'From: '.$from."\r\n"; // Set from headers
        mail($to, $subject, $message, $headers); // Send our email

        Yii::app()->user->setFlash('user',
            Yii::t('notices', 'A new password has been sent to your email address.')
        );
        $this->refresh();
    }

    $this->layout = '//layouts/main';
    $this->render('resetpassword');
}
private函数randomPassword(){
$alphabet=“abcdefghijklmnopqrstuwxyzabcdefghijklmnopqrstuwxyzo123456789”;
$pass=array();//记住将$pass声明为数组
$alphaLength=strlen($alphabet)-1;//将长度-1放入缓存
对于($i=0;$i<8;$i++){
$n=兰特(0,$alphaLength);
$pass[]=$alphabet[$n];
}
return introde($pass);//将数组转换为字符串
}
公共函数actionForgotPassword($email){
$user=user::model()->findAll('email=:email',
数组('email'=>$email);
如果(计数($user)!=1){
Yii::app()->user->setFlash('user',
Yii::t('消息','找不到用户');
);
$this->refresh();
}
否则{
$user=$user[0];
$user->password=$this->randomPassword();
$user->update();
//将新密码发送到电子邮件
$from='密码重置';
$to=$user->email;
$name=$user->firstname.'.$user->lastname;
$subject='Reset Password';
$message=Yii::t('user','Dear')。$user->username',
'.Yii::t('user','已请求重置您的密码。')。'
'.Yii::t('user',您的新密码是'):'.$user->password'
“;//我们上面的信息
$headers='From:'.$From.\r\n“;//从标头设置
邮件($to,$subject,$message,$headers);//发送我们的电子邮件
Yii::app()->user->setFlash('user',
Yii::t('通知','新密码已发送到您的电子邮件地址')
);
$this->refresh();
}
$this->layout='//layouts/main';
$this->render('resetpassword');
}
还添加一个视图“resetpassword.php”:



你想过怎么做吗?是的@doniyor plz help mehello@samuel liew,我为忘记密码创建了一个链接?如果我点击该按钮,则会弹出一个带有电子邮件和提交按钮的弹出窗口。请尽快向我显示忘记密码链接
private function randomPassword() {
    $alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
    $pass = array(); //remember to declare $pass as an array
    $alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
    for ($i = 0; $i < 8; $i++) {
        $n = rand(0, $alphaLength);
        $pass[] = $alphabet[$n];
    }
    return implode($pass); //turn the array into a string
}

public function actionForgotPassword($email) {
    $user = User::model()->findAll('email=:email',
                array('email'=>$email);

    if(count($user) != 1) {
        Yii::app()->user->setFlash('user',
            Yii::t('messages', 'Unable to find user.'));
        );
        $this->refresh();
    }
    else {
        $user = $user[0];
        $user->password = $this->randomPassword();
        $user->update();

        // Send new password to email
        $from = 'Password Reset <admin@yoursite.com>';
        $to = $user->email;
        $name = $user->firstname.' '.$user->lastname;
        $subject = 'Reset Password';

        $message = Yii::t('user', 'Dear').' '.$user->username.',
'.Yii::t('user', 'A request has been made to reset your password.').'
'.Yii::t('user', 'Your new password is').': '.$user->password.'
'; // Our message above

        $headers = 'From: '.$from."\r\n"; // Set from headers
        mail($to, $subject, $message, $headers); // Send our email

        Yii::app()->user->setFlash('user',
            Yii::t('notices', 'A new password has been sent to your email address.')
        );
        $this->refresh();
    }

    $this->layout = '//layouts/main';
    $this->render('resetpassword');
}
<div class="flash-success">
    <?= Yii::app()->user->getFlash('user') ?>
</div>