大家好我正在尝试向用户发送带有重置密码链接的电子邮件。当他们单击“忘记密码”时,它将要求他们提交电子邮件。如果他们提供了正确的电子邮件,它将通过令牌链接向他们发送邮件。我已经生成了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');
}
}
任何人都可以向我解释我犯了什么错误。
谢谢。
答案 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
您可以如下设置重置密码页面
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)用户提交新密码时,只需要更新令牌行中的密码即可。