codeigniter - 将 form_validation 调用设为私有
问题描述
我有一个 CodeIgniter Captcha,我正在使用 Codeigniter 表单验证和规则的回调函数进行验证。以下是我的注册控制器中的两种方法:
public function index(){
$this->form_validation->set_rules('user_name' , 'Username' , 'trim|required|max_length[32]');
$this->form_validation->set_rules('captcha' , 'Captcha' , 'trim|required|max_length[32]|callback_check_captcha');
$this->form_validation->set_rules('password', 'Password','trim|required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('confirm_password', 'Confirm Password','trim|required|min_length[5]|max_length[12]|matches[password]');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
if ($this->form_validation->run()==FALSE){
//Captcha code
回调是:
private function check_captcha($captcha_input){
// First, delete old captchas
$expiration = time() - 7200; // Two hour limit
$this->db->where('captcha_time < ', $expiration)
->delete('captcha');
// Then see if a captcha exists:
$sql = 'SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time > ?';
$binds = array($captcha_input, $this->input->ip_address(), $expiration);
$query = $this->db->query($sql, $binds);
$row = $query->row();
if ($row->count == 0){
$this->form_validation->set_message('check_captcha', 'Captcha Fail');
return FALSE;
}else {
return TRUE;
}
}
问题是用户将能够使用 url ( http://[::1]/ci/register/check_captcha ) 访问回调函数。尽管如此,在这种情况下并没有发生什么重大的事情,但我还是想学会防止这种情况发生。通常,在 CI 中,我将功能设为私有,不允许用户通过 URl 访问。如果我尝试将 check_captcha 函数设为私有,我会得到
消息:从上下文“CI_Form_validation”调用私有方法 Register::check_captcha()
我了解 form_validation 正在从注册类外部调用回调。有人能告诉我在这种情况下如何限制对控制器的 URl 访问吗?
解决方案
推荐阅读
- python - 如何从另一个excel中检索时间戳列范围内的excel文件中的所有行
- flutter - 抛出 providernotfoundexception(t, context.widget.runtimetype);
- excel - 如何防止超过电子表格单元格字符限制的 CSV 数据溢出到相邻单元格?
- java - 如何在命令行中对 Java 文件运行 antlr4?
- percona - 为什么在同一子网中的两台主机之间使用 Percona OSC 时出现此连接错误
- api - 供个人使用的 ADS-B 航空数据
- python - 将用户输入分配给列表中的项目 (Python) - 选择您自己的冒险游戏
- python - 交换列表中的元素
- assembly - 如何修改此过程以使用不轮询中断 I/O 读取可变长度字符串?
- java - 当我反转参数顺序时,从命令行中断运行 Java 模块