Логика забытого пароля - PullRequest
0 голосов
/ 15 февраля 2012

Я хочу выяснить, как я могу узнать, установлены ли новый пароль и дата, когда он был запрошен (0000-00-00 00:00:00), а затем отправлять электронные письма на основании этого.Однако я думаю, что мне нужно изменить свою логику, потому что, если она уже установлена, я не хочу, чтобы она продолжала массово отправлять электронные письма пользователю.Кроме того, я не уверен, что если они не получат письмо.

Любые идеи о том, что мне следует делать?

РЕДАКТИРОВАТЬ: Просто хотел добавить, что new_password_keyНЕ пароль для пользователя, чтобы войти в систему.На данный момент я собирался направить их на страницу по ссылке в электронном письме, где они могут ввести новый пароль.

if (!isset($user_data->new_password_key) && (!isset($user_data->new_password_requested)))
{
    if ($this->kow_auth->forgot_password($this->input->post('username')))
    {
        $this->kow_auth->send_email('forgot_password', 'KOW Manager Forgot Password Email', $user_data);
        echo json_encode(array('success' => 'yes', 'message' => 'A temporary password has been emailed to you!'));
    }
    else
    {

    }    
}
else
{
    echo json_encode(array('success' => 'yes', 'message' => 'Check your email for your temporary password!'));
}

РЕДАКТИРОВАТЬ 2:

Кажется, у меня просто есть некоторые проблемы с логикой, потому что что, если он переходит к оператору if if ($ready_sent_password) и по какой-то причине они его не получили.Тогда что?Или что, если itt переходит к if (! Strtotime ($ user_data-> new_password_requested) <= (time () - 172800)), что для меня звучит глупо, потому что зачем заставлять их ждать два дня, чтобы получить новый парольключ.</p>

function forgot_password_submit() 
{
    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');

    if (!$this->form_validation->run()) 
    {
       echo json_encode(array('error' => 'yes', 'message' => 'There was a problem submitting the form! Please refresh the window and try again!')); 
        return;
    }

    $user_data = $this->users->get_user_by_username($this->input->post('username'));
    if ($user_data === NULL) 
    {
        echo json_encode(array('error' => 'yes', 'message' => 'User does not exist in the database!'));
        return;
    }

    $already_sent_password = (isset($user_data->new_password_key) && isset($user_data->new_password_requested));
    if ($already_sent_password) 
    {
        echo json_encode(array('success' => 'yes', 'message' => 'Check your email for your temporary password!'));
        return;
    }

    if (!strtotime($user_data->new_password_requested) <= (time() - 172800)) 
    {
        echo json_encode(array('error' => 'yes', 'message' => 'You have to wait 2 days before a new temp password can be emailed!'));

    } 
    else 
    {
        if ($this->kow_auth->forgot_password($this->input->post('username'))) 
        {
            $this->kow_auth->send_email('forgot_password', 'KOW Manager Forgot Password Email', $user_data);
            echo json_encode(array('error' => 'yes', 'message' => 'A temporary password has been emailed to you'));
        } 
        else 
        {
            echo json_encode(array('error' => 'yes', 'message' => 'A temporary password could not be created for you!'));
        }
    }

1 Ответ

2 голосов
/ 16 февраля 2012

Лично я не стал бы беспокоиться о массовых электронных письмах пользователя. Если пользователь нажимает кнопку 20 раз, он должен получить 20 писем.

Однако, если вы не хотите повторно отправлять электронное письмо, если последний раз, когда они запрашивали пароль, было менее 20 минут назад, вы можете сделать следующее:

<?php
// Assuming this is in UTC
$requested = strtotime($user_data->new_password_requested);
if (time() - $requested <= (60 * 20))
{
    // Don't send the email
    return false;
}

return true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...