以编程方式登录用户(PyroCMS + PHP)

时间:2014-03-09 22:26:09

标签: php events pyrocms

在PyroCMS 2.2.3中,我希望在用户激活后以编程方式登录。

要处理我在事件文件中创建的事件。

但我想知道如何在激活后登录此用户。 我有$ id,但还需要设置其他变量吗?

//inside constructor
Events::register('post_user_activation', array($this, 'evt_post_user_activation'));

....

public function evt_post_user_activation($id) 
{

     $this->ci->current_user = $this->log_in_user($id);

}

private function log_in_user($id)
{

     $this->ci->current_user->id = $id;
}

1 个答案:

答案 0 :(得分:1)

我做了类似的事情然而我能够自动激活,因为用户付费用户。我创建了一个新的注册控制器,并实际上从用户控制器复制了注册功能。然后,以下功能使这很容易。

$this->ion_auth->login($user->email, $user->password);

通过深入了解“systems / cms / modules / users /”中的ion_auth库和模块,ion_auth登录功能最终设置了以下会话数据

$this->session->set_userdata(array(
            'username'             => $user->username,
            'email'                => $user->email,
            'id'                   => $user->id, //kept for backwards compatibility
            'user_id'              => $user->id, //everyone likes to overwrite id so we'll use user_id
            'group_id'             => $user->group_id,
            'group'                => $group_row->name
));

使用以下查询

创建用户对象
$this->db->select('username, email, id, password, group_id')
    ->where(sprintf('(username = "%1$s" OR email = "%1$s")', $this->db->escape_str($identity)));

if (isset($this->ion_auth->_extra_where))
{
    $this->db->where($this->ion_auth->_extra_where);
}

$query = $this->db->where('active', 1)
    ->limit(1)
    ->get($this->tables['users']);

$user = $query->row();