Tank Auth:自动登录电子邮件验证

时间:2012-01-27 16:26:57

标签: codeigniter autologin tankauth

我正在使用Tank Auth,并要求我的用户验证他们的电子邮件地址。验证后,用户仍未登录。我希望用户在激活帐户时自动登录。

在我以前的版本(自制的auth)中,我编写了一个不需要密码的登录功能,只能在这种情况下调用。但是,我无法在Tank Auth中看到这样做的方法。一种解决方案是在激活之前缓存密码,但我真的不希望这样做...

2 个答案:

答案 0 :(得分:1)

如果您查看处理电子邮件激活的tank auth中的代码,您会看到它明确地将用户注销电子邮件验证。

https://github.com/ilkon/Tank-Auth/blob/master/application/controllers/auth.php

第243行。

您可以在第244行注释掉$this->tank_auth->logout();,而 可以按照您的意愿工作,但这样做会很糟糕。

答案 1 :(得分:1)

您可以绕过登录系统。

将其电子邮件地址或别名存储在Cookie中。

当他们激活抓取cookie时,为用户搜索(验证它们存在),然后设置正常的登录会话。

登录只是一组会话规则。

在您的激活脚本/电子邮件流程中

,附加

$this->_set_ac_cookie({email});

-

protected function _set_ac_cookie({email})
{
    return $this->input->set_cookie(array(
        'name'  =>  'ac_cookie_'.{email},
        'expire'    =>  '7200', //You may mirror when/if your activation key expires
        'domain'    =>  'yourdomain.com',
        'path'  =>  '/'
    ));
}

检查Cookie存在

protected function _before_activation({email})
{
    return $this->input->cookie('ac_cookie_'.{email})) ? TRUE : FALSE;
    //make sure {email} has a UNIQUE db constraint
}
用户点击激活链接时

if($this->_before_activation({email}))
{
        //check user exists AND activation status === false (0)
        //grab the user details from db based on {email}, set activation status to true (1)

        //setup login session
        $this->session->set_userdata(array(
            'logged_in' =>  (int)1,
            'user_id'   =>  {user->id},
            'alias' =>  {user->alias}
        ));

        redirect('dashboard');
}
else
{
    //sorry!
}