В моем приложении у меня есть функция забытого пароля, поэтому, если пользователь теряет свой пароль, он может щелкнуть меню и получить электронное письмо с URL-адресом для сброса пароля.
Я хочу применить ограничение по времени к этой функции. Таким образом, пользователь не сможет сбросить свой пароль с помощью того же URL-адреса, который был отправлен в электронном письме, если по истечении определенного времени.
public function password_post()
{
// $email = trim($this->input->get_post('email'));
$data = array (
'username' => $this->input->get_post('username'),
'idcardno' => $this->input->get_post('idcardno')
);
$result = $this->model->user_exist($data);
if ($result) {
$idcardno = $data['idcardno'];
$data['email'] = $this->db->get_where('mytable', array('idcardno' => $idcardno))->row()->email;
$this->send_forgot_password($data);
$this->response(array('success' => 'New password has sent to your email'), 200); // 200 being the HTTP response code
} else {
$this->response(array('error' => 'Your account doesnt exist'), 404);
}
}
и это метод для отправки электронной почты.
private function send_forgot_password($data) {
require(APPPATH.'controllers/mail-master/PHPMailerAutoload.php');
// $email_encode=urlencode($data['email']);
$mail = new PHPMailer;
// $mail->SMTPDebug = 3;
$mail->isSMTP();
$mail->Host = 'mail-id.myweb.com';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'mobile14';
$mail->SMTPSecure = 'tls';
$mail->Port = 25;
$emailcode = md5($this->config->item('salt') . $username);
// Email body
$mail->From = '[email protected]';
$mail->FromName = 'BNI Life';
$mail->addAddress($data['email']);
$mail->isHTML(true);
$mail->Subject = 'Forgot Password';
$mail->Body =
' ';
$mail->send();
}
В таблице с пользователями вам нужно сохранить временную метку, когда вы отправили пароль для сброса пароля по электронной почте.
Затем, когда вы проверяете запрос пользователя на предоставленную ссылку сброса, вы должны сравнить сохраненную временную метку из базы данных с текущей временной меткой.
Что-то вроде:
$diff = time() - $mail_sent_timestamp;
//If $diff > 60*60*24*7,
//Diff greater then 7 days; Don't send the new PW to user.
//Else
//Send new password
Других решений пока нет …