CodeIgniter Tank Auth - send_again函数的问题

时间:2011-04-30 15:37:58

标签: php codeigniter tankauth

我一直在玩这个图书馆,这绝对棒极了。我正在测试它,我认为当一个未激活的用户尝试登录时会出现问题。我只是想知道你们是否有人注意到了这一点?会发生什么情况是用户被重定向到send_again页面,但是一旦在那里,我们就无法再将URL更改为任何其他位置。我猜这是因为会话信息没有被破坏 - 在登录功能中:

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

这会一直执行(除非我们强行注销)。有谁知道如何解决这个问题? 谢谢!

3 个答案:

答案 0 :(得分:1)

尝试删除\ controllers \ auth.php函数登录中的重定向值,并找到:

elseif (isset($errors['not_activated'])) {              
redirect('');//auth/send_again/ 
}
当您未激活用户时,将始终调用

send_again函数。因此,要传递send_again函数,您只需要删除重定向值

如果要激活电子邮件激活,则需要在config文件夹

上配置email.php

答案 1 :(得分:1)

我在客户的网站上发现了这个错误。强制注销似乎解决了这个问题。 因此,我在函数重发函数中强制注销,就在它发送激活链接之后。

在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操作中改变了任何内容。

我希望它适用于其他人。

答案 2 :(得分:0)

嘿,这一直对我有用:

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

注意条件中的爆炸