我想将Ion Auth扩展为只允许某些电子邮件地址注册。
我很确定我可以一起破解它并获得一些工作,但作为codeigniter和ion auth的新手,我想知道是否有“正确的方法”来做我需要的东西?
例如,我可以“扩展”离子身份验证(这样我就可以更新离子身份验证核心文件而无需更改我的更改吗?)。
我注意到还有一些钩子,包括这个(在寄存器功能中):
$this->ci->ion_auth_model->trigger_events('pre_account_creation');
这些解决方法在何处解决,我是否可以使用此方法拦截电子邮件地址中的注册,这些地址与我希望注册的电子邮件地址列表不相符?
如果是这样,我该怎么做?我需要访问$email
函数中的register()
变量。
或者仅仅是从离子身份验证中更改基本代码并且将来不更新它的情况?
感谢你给我的任何帮助。不要担心电子邮件位,我能够确定电子邮件地址是否与所需的电子邮件域匹配,我更感兴趣的是扩展库的最佳方式。
汤姆
编辑:嗨Ben,感谢您的回答,并感谢您花时间看看我的问题。不幸的是,这没有帮助。我想你在那里尝试做的是在sql查询中添加一点“where in”子句?我想where in
位不正确,因为没有列名。
此外,此时我无法令人满意地修改sql查询以生成所需的输出。例如我可以添加一个钩子到一个字面为$this->db->where('1=1')
的函数,并在下一个查询中输出这个sql:
SELECT COUNT(*) AS `numrows` FROM (`users`) WHERE `1=1` AND `email` = 'rawr@rawr.com'
AND email = 'rawr@rawr.com'
位始终仍然不返回任何行。它应该是OR email = 'rawr@rawr.com'
,但是如果不编辑Ion Auth核心代码,那么我将无法改变它。
我开始怀疑(从最后几个小时的修补)我可能需要编辑离子auth核心才能实现这一目标。
答案 0 :(得分:2)
答案 1 :(得分:1)
最后,我刚刚编写了一个form_verification
回调函数,我将其置于ion_auth的auth
控制器中,该控制器检查了允许的域列表。 :)
答案 2 :(得分:0)
在auth控制器中验证表单时,添加回调:
$this->form_validation->set_rules('email', 'Email Address', required|callback_validate_email');
您在控制器中创建一个名为validate_email的方法:
function validate_email() {
if (strpos($this->input->post('email'), '@mycompany.com') === false) {
$this->form_validation->set_message('validate_email', 'Not official company email address.');
return false;
} else return true;
}
这将导致用户的创建失败,因为所有规则都必须通过。您还提供了一条错误消息。只需确保在表单视图端有这一行:
echo validation_errors();