CodeIgniter Tank Auth - проблема с функцией send_again - PullRequest
2 голосов
/ 30 апреля 2011

Я играл с этой библиотекой, которая просто потрясающая. Я тестировал его и думаю, что есть проблема, когда неактивированный пользователь пытается войти в систему. Мне просто интересно, заметил ли кто-нибудь из вас это уже? Что происходит, так это то, что Пользователь перенаправляется на страницу send_again, но, оказавшись там, мы больше не можем изменять URL-адрес в любое другое место. Я предполагаю, что это происходит из-за того, что информация о сеансе не уничтожена - в функции входа в систему:

elseif ($this->tank_auth->is_logged_in(FALSE)) {
// logged in, not activated
redirect('/auth/send_again/'); 

это выполняется все время (если мы не принудительно выйдем из системы). Кто-нибудь знает, как это исправить? Спасибо!

Ответы [ 3 ]

1 голос
/ 27 августа 2012

попробуйте удалить значение перенаправления в \ controllers \ auth.php функции login и найдите это:

elseif (isset($errors['not_activated'])) {              
redirect('');//auth/send_again/ 
}

Функция send_again всегда будет вызываться, когда вы не активированы пользователем. Итак, чтобы передать функцию send_again, вам просто нужно удалить значение перенаправления

если вы хотите активировать активацию электронной почты, вам нужно настроить email.php в папке config

1 голос
/ 20 марта 2013

Я нашел эту ошибку на сайте клиента. Принудительный выход из системы, кажется, это исправить. Итак, я ввел принудительный выход из функции в функции пересылки сразу после отправки ссылки активации.

Рабочий код выглядит следующим образом в application / controllers / auth.php

    function send_again()
    {
    if (!$this->tank_auth->is_logged_in(FALSE)) {                           // not logged in or activated
        redirect('/auth/login/');

    } else {
        $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|valid_email');

        $data['errors'] = array();

        if ($this->form_validation->run()) {                                // validation ok
            if (!is_null($data = $this->tank_auth->change_email(
                    $this->form_validation->set_value('email')))) {         // success

                $data['site_name']  = $this->config->item('website_name', 'tank_auth');
                $data['activation_period'] = $this->config->item('email_activation_expire', 'tank_auth') / 3600;

                $this->_send_email('activate', $data['email'], $data);

                $this->_display_message(sprintf($this->lang->line('auth_message_activation_email_sent'), $data['email']));

                /* 
                 * Force a logout here or tank_auth remains 
                 * stuck in the resend mode.
                 */ 
                $this->tank_auth->logout();

            } else {
                $errors = $this->tank_auth->get_error_message();
                foreach ($errors as $k => $v)   $data['errors'][$k] = $this->lang->line($v);
            }
.....

Насколько я могу судить, это просто взлом, но он решил проблему для меня. Я не знаю, изменил ли создатель этого сайта что-то в действиях tank_auth или нет.

Я надеюсь, что это работает для других.

0 голосов
/ 30 апреля 2011

эй, это всегда работало для меня:

if( !$this->tank_auth->is_logged_in() ){
   // not logged in
} else {
   // logged in
}

обратите внимание на удар в состоянии

...