任何人都可以为CodeIgniter 1.7.x推荐一个身份验证库吗?

时间:2010-03-06 13:55:42

标签: php security authentication codeigniter

我刚刚开始使用CodeIgniter 1.7.2并且imendialtly注意到没有用于用户身份验证的内置库。

我不需要任何花哨的东西。它只是对我的后台系统中的用户进行身份验证。我不需要用户和组,或权限等。我只需要一个允许用户登录的脚本。如果用户尝试访问某个页面但他们未登录,则应拒绝这些页面。但它必须是安全的,如果它使用CI验证库会很好。

有人可以为CI 1.7.2推荐一个库吗?

我确实注意到StackOverflow上有一个类似的帖子,但是它已经过时了,大多数库建议要么不支持1.7.2,要么不再维护。

最重要的是必须安全和简单。

3 个答案:

答案 0 :(得分:2)

我倾向于推出自己的简单身份验证库。

首先,这是身份验证库。它在会话中保留用户ID令牌。验证时,它会检查是否存在此令牌。

<强>应用/库/ Auth.php

class Auth
{
    var $ci;
    var $user_id;

    function Auth()
    {
        // Get CodeIgniter instance
        $this->ci = get_instance();

        // Fetch token from the session
        $this->user_id = $this->ci->session->userdata('user_id');
    }

    function check()
    {
        return $this->user_id != null;
    }

    function login($user_id)
    {
        // Set token in the session
        $this->ci->session->set_userdata('user_id', $user_id);

        $this->user_id = $user_id;
    }

    function logout()
    {
        // Remove token from the session
        $this->ci->session->unset_userdata('user_id');

        $this->user_id = null;
    }
}

我创建了自己的基本控制器并在那里进行身份验证。为方便起见,如果经过身份验证,则基本控制器会加载并存储当前用户。

<强>应用/库/ MY_Controller.php

class MY_Controller extends Controller
{
    var $user;

    function MY_Controller()
    {
        parent::Controller();
    }

    function do_auth()
    {
        if ($this->auth->check())
        {
            // Authenticated. Fetch current user
            $this->user = $this->user_model->get_user($this->auth->user_id);
        }
        else
        {
            // Not authenticated. Redirect to login page
            redirect('users/login');
        }
    }
}

然后在任何动作中我都可以调用基本控制器的认证功能。

class Items extends MY_Controller
{
    function Items()
    {
        parent::MY_Controller();
    }

    function create()
    {
        // Do authentication
        $this->do_auth();

        // Continue with handling request
    }
}

如果我喜欢,我也可以保护整个控制器。

class Items extends MY_Controller
{
    function Items()
    {
        parent::MY_Controller();

        // Secure entire controller
        $this->do_auth();
    }
}

我将登录和注销操作放在用户控制器中。在登录操作中,我验证用户的凭据并登录用户。

class Users extends MY_Controller
{
    function Users()
    {
        parent::MY_Controller();
    }

    function login()
    {
        // Verify form input
        $this->load->library('form_validation');
        $this->form_validation->set_rules('username', 'Username', 'required');
        $this->form_validation->set_rules('password', 'Password', 'required');

        if ($this->form_validation->run())
        {
            // Fetch the user based on credentials supplied
            $user = $this->user_model->get_user_by_credentials($this->input->post('username', true), $this->input->post('password', true));

            if ($user != null)
            {
                // Credentials verified. Log the user in.
                $this->auth->login($user->user_id);
                redirect('');
            }
            else
            {
                // Login failed. Show the login page.
                $this->load->view('users/login', array('login_failed' => true));
            }
        }
        else
        {
            // Yet to authenticate. Show the login page.
            $this->load->view('users/login', array('login_failed' => false));
        }
    }

    function logout()
    {
        $this->auth->logout();
        redirect('users/login');
    }
}

答案 1 :(得分:2)

DX Auth或Freak Auth是很棒的库,几乎可以满足您的所有需求

  

http://codeigniter.com/wiki/DX_Auth/

     

http://codeigniter.com/wiki/FreakAuth/

答案 2 :(得分:0)

嗯,CI不是非常具体的.htaccess用户/密码系统。特别是如果你只有几个用户。

设置简单,并且内置于每个Apache服务器中。