我正在使用Tank Auth,并要求我的用户验证他们的电子邮件地址。验证后,用户仍未登录。我希望用户在激活帐户时自动登录。
在我以前的版本(自制的auth)中,我编写了一个不需要密码的登录功能,只能在这种情况下调用。但是,我无法在Tank Auth中看到这样做的方法。一种解决方案是在激活之前缓存密码,但我真的不希望这样做...
答案 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!
}