重置密码链接在Codeigniter中无法正常工作

时间:2018-06-29 08:53:58

标签: php codeigniter

大家好我正在尝试向用户发送带有重置密码链接的电子邮件。当他们单击“忘记密码”时,它将要求他们提交电子邮件。如果他们提供了正确的电子邮件,它将通过令牌链接向他们发送邮件。我已经生成了16位随机数。因此,当我尝试在链接中传递电子邮件和令牌号时,由于某种原因,它没有传递这两个值。

这是我的代码:

public function ForgotPassword()
{
    $email = $this->input->post('email');
    $findemail = $this->Login_model->forgotPassword($email);
    $token = random_string('alnum', 16);
    if ($findemail) {

        $config = [
            'protocol' => 'smtp',
            'smtp_host' => 'ssl://smtp.gmail.com',
            'smtp_port' => 465,
            'smtp_user' => 'do-not-reply@example.com', // change it to yours
            'smtp_pass' => 'password', // change it to yours
            'mailtype' => 'html',
            'charset' => 'iso-8859-1',
            'wordwrap' => true
        ];


        $message = 'Please click on below link to reset your password';

        $message .= "<a href='http://localhost/SVN/Project_X/Login/resetpassword/email='.$email.'/token='.$token.'>test</a>";
        $this->load->library('email', $config);
        $this->email->set_newline("\r\n");
        $this->email->from('do-not-reply@example.com'); // change it to yours

        $this->email->to($email); // change it to yours
        $this->email->subject('Message from Project_X for reset your password');
        $this->email->message($message);
        if ($this->email->send()) {
            $this->session->set_flashdata(
                'message',
                'We have sent you email for reset your password!Please check your email'
            );
            $this->load->view('login_view');
        } else {
            show_error($this->email->print_debugger());
        }

    } else {
        //echo "<script>alert(' $email not found, please enter correct email id')</script>";
        $this->session->set_flashdata('message', 'Mail  not found, please enter correct email id');
        $this->load->view('login_view');
    }
}

任何人都可以向我解释我犯了什么错误。

谢谢。

2 个答案:

答案 0 :(得分:3)

只需从链接中删除单引号'',然后使用双引号""

尝试一下:

$message .="<a href='http://localhost/SVN/Project_X/Login/resetpassword/email=".$email."/token=".$token.">test</a>";

答案 1 :(得分:1)

尝试以下代码

解决方案1 ​​

$token=random_string('alnum', 16);      
$email = 'test@test.com';
$message .="<a href='http://localhost/SVN/Project_X/Login/resetpassword/$email/$token'>test</a>";

通过uri segment ci功能访问您的电子邮件和令牌字段。

$this->uri->segment()

解决方案2

您可以如下设置重置密码页面

enter image description here

1)生成带有以下示例令牌的重置密码页面URL,并在用户电子邮件中的链接下方发送。

$token=random_string('alnum', 16);
$confirmationLink = base_url().'Login/resetpassword/'.$verificationCode;   

2)在忘记密码用户的用户表中(存储令牌值)创建1个字段。

3)在登录控制器中创建以下功能

public function resetpassword($token=NULL){ echo $token; }

4)使用令牌,您可以识别该令牌是否存在于数据库中,然后向用户显示重置密码页面,否则显示404页面

5)用户提交新密码时,只需要更新令牌行中的密码即可。