我刚刚开始使用CodeIgniter 1.7.2并且imendialtly注意到没有用于用户身份验证的内置库。
我不需要任何花哨的东西。它只是对我的后台系统中的用户进行身份验证。我不需要用户和组,或权限等。我只需要一个允许用户登录的脚本。如果用户尝试访问某个页面但他们未登录,则应拒绝这些页面。但它必须是安全的,如果它使用CI验证库会很好。
有人可以为CI 1.7.2推荐一个库吗?
我确实注意到StackOverflow上有一个类似的帖子,但是它已经过时了,大多数库建议要么不支持1.7.2,要么不再维护。
最重要的是必须安全和简单。
答案 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是很棒的库,几乎可以满足您的所有需求
答案 2 :(得分:0)
嗯,CI不是非常具体的.htaccess用户/密码系统。特别是如果你只有几个用户。
设置简单,并且内置于每个Apache服务器中。