Tank Auth забыл пароль не работает - PullRequest
1 голос
/ 07 мая 2011

Я использую CodeIgniter + Tank Auth. Только код http://localhost/XXXXXXXX/auth/forgot_password не работает. Результат всегда таков: «Ваш ключ активации неверен или устарел. Пожалуйста, проверьте свою электронную почту еще раз и следуйте инструкциям.»

Регистрация и активация в порядке.

Ответы [ 4 ]

4 голосов
/ 07 мая 2011

Некоторые вероятные проблемы:

  • Файлы cookie установлены неправильно. Проверьте настройки файлов cookie и выполните тест, чтобы убедиться, что вы можете устанавливать и читать файлы cookie. (это может быть недействительным, если куки не используются для сброса)
  • Срок действия пароля для сброса истек или был установлен неправильно. Проверьте базу данных, чтобы убедиться, что значение hte является правильным, прежде чем перейти по ссылке, и проверьте $config['forgot_password_expire'] в Tank Auth.
  • Возможно, вы указали не тот URL в вашем письме. Это не выглядит правильно:

    http://localhost/XXXXXXXX/auth/forgot_password

    Это должно быть что-то вроде:

    http://localhost/auth/forgot_password/XXXXXXXX

Не отговаривать вас от использования Tank Auth, но, воспользовавшись им, я могу рекомендовать попробовать Ion_Auth , если вы все еще находитесь на ранних стадиях. Я полагаю, что он также используется в PyroCMS , если это добавляет кредит.

2 голосов
/ 14 июля 2011

Если XXXXXXXX в вашем URL указывает, что у вас есть дополнительный сегмент URI перед / auth /, вы должны изменить это:

function reset_password()
{
    $user_id = $this->uri->segment(3);
    $new_pass_key = $this->uri->segment(4);

на следующее:

function reset_password()
{
    $user_id = $this->uri->segment(4);
    $new_pass_key = $this->uri->segment(5);

Примечаниеразные числа в $ this-> uri-> сегмент ().С дополнительным сегментом перед / auth / ваш идентификатор пользователя и код активации будут переданы в качестве параметров в 4-м и 5-м сегменте (а не в 3-м и 4-м, который предполагает Tank Auth).

1 голос
/ 30 сентября 2012

В основном index.php вы должны определить часовой пояс.Пример:

date_default_timezone_set('Europe/Paris');

это гарантирует, что в следующей проверке будут все даты с одинаковым часовым поясом

$this->db->where('UNIX_TIMESTAMP(new_password_requested) >', time() - $expire_period);
1 голос
/ 04 февраля 2012

это может быть отметка времени в вашей базе данных в пользовательской модели функция "can_reset_password" использует UNIX_TIMESTAMP (new_password_requested)

Вы можете повторить $ user_id и $ new_pass_key, если они верны, тогда проблема в сравнении времени. исправить URL, чтобы всегда получать последние два сегмента

$break =$this->uri->total_segments();
$new_pass_key= $this->uri->segment($break);
$user_id= $this->uri->segment($break-1);

для отметки времени попробуйте это для функции reset_password в пользовательской модели

function reset_password($user_id, $new_pass, $new_pass_key, $expire_period = 900)
{
    $this->load->helper('date');
    $this->db->set('password', $new_pass);
    $this->db->set('new_password_key', NULL);
    $this->db->set('new_password_requested', NULL);
    $this->db->where('id', $user_id);
    $this->db->where('new_password_key', $new_pass_key);
    $this->db->where('UNIX_TIMESTAMP(new_password_requested) >=',mysql_to_unix( time() - $expire_period));

    $this->db->update($this->table_name);
    return $this->db->affected_rows() > 0;
}
...