2010-02-13 124 views
3

使用Codeigniter,我可以创建用于用户身份验证的功能。 我有一个函数,我打电话来检查给出的用户名/密码是否有效。 我遇到的问题是,如果没有给出密码,我不希望代码显示“无效登录”。它应该是“需要密码”或类似的东西。通过表单验证删除不必要的错误消息

我想我不能要求密码字段,在这种情况下,空密码会导致无论如何失败的日志。但是,我想确保SQL注入不会发生。

$this->form_validation->set_rules('username','username','required|callback_authenticate'); 
$this->form_validation->set_rules('password','password','required'); 

$this->form_validation->set_message('authenticate','Invalid login. Please try again.'); 

身份验证功能

function authenticate() { 

    return Current_User::checkLogin($this->input->post('username'), 
              $this->input->post('password')); 
} 
+0

一定是缺乏睡眠,但不要求它不会是世界的尽头。没有什么可以注入的。我只需要确定是否有“文本”,我必须去除任何虚假的东西。 – luckytaxi 2010-02-13 22:50:57

回答

1

我建议你创建你可以在与您可以添加到set_rules()功能这样的规则中使用一个回调函数:

$这个 - > form_validation-> set_rules( '密码', '密码', '需要| your_callback_function');

这样,required规则肯定会首先被调用。当用户输入密码时,将检查下一个规则。在这种情况下,它会经过您的回调验证功能。如果用户在密码字段中未输入任何内容,则该错误消息应自动显示需要密码。

如果要防止密码字段上的SQL注入,请将sha1md5规则添加到密码字段中。

检查出回调:您自己的验证功能Form Validation library

此外,如果您将使用Active Record class而不是手动输入查询,那么由于系统会自动转义值,因此查询将更安全。您也可以选择使用预准备语句来防止SQL注入。