如何在注册期间根据用户角色将特定电子邮件域列入白名单

时间:2018-04-09 14:30:47

标签: php wordpress woocommerce email-validation

我有一个WordPress网站,允许用户在注册时注册为雇主或候选人。候选人将是大学生,所以我想添加一些功能来验证他们是否使用 @ school.edu 电子邮件域。在注册过程中,用户被问及他们是在寻找“雇用”还是“为工作”,这决定了他们被分配了什么角色。考生应仅通过.edu电子邮件进行验证。

我正在使用自定义主题,该主题使用自己的注册流程与WooCommerce相结合。我已经联系了主题开发人员和WooCommerce支持,询问我如何实现这一点,但他们只是指出了我需要自定义的代码部分。我不知道 PHP ,我不能雇用开发人员,因为我目前没有在我的网站上寻求收入(概念验证)。我知道这只是几行代码,并且正在寻找帮助我完成这项工作的人,或者至少让我指向正确的方向。

我设法在SO上找到了一些关于电子邮件验证的解决方案,但它们不是基于用户角色。我喜欢使用数组的想法,以便随着我的用户群增长(目前在一所学校进行beta测试),我可以慢慢添加更多的学院/大学。类似的东西:

$email = $_POST['email'];
$allowed = array('school.edu');

// Make sure the address is valid
if (filter_var($email, FILTER_VALIDATE_EMAIL))
{
$explodedEmail = explode('@', $email);
$domain = array_pop($explodedEmail);

if ( ! in_array($domain, $allowed))
{
// Not allowed
}

}

以下是我需要修改的相关代码的电子邮件验证部分(不要担心我也会附加整个代码):

 if(!is_email($user_email)) {
 //invalid email
 workscout_form_errors()->add('email_invalid', __('Invalid email','workscout'));}

当学生输入non.edu电子邮件地址时,我还想包含一个简单的验证错误。任何帮助,没有人教我“自己学习PHP”或抱怨我的问题的格式和结构,将不胜感激。

链接到完整注册码:https://drive.google.com/file/d/1eatPr8F-y1c-0sG2Xnepf3Dw6Mj2Of6I/view?usp=sharing

候选人角色选择:LINE 213

电子邮件验证:LINE 398

编辑: 我感谢所有高级答案,但我需要知道如何在我的主题使用的当前registration.php文件中实现任何答案而不会破坏任何内容(目前使用的是儿童主题,以帮助防止这种情况)。意思我需要知道插入答案的行是什么,任何答案还需要使用registration.php文件中调用的函数。我是一个完全没有PHP的新手,我只想“即插即用”而没有内疚,我现在感觉甚至没有帮助,也无法独自完成。

编辑2: 如果基于我不存在的PHP知识和对编码逻辑的基本理解,我必须在黑暗中进行全面刺杀,我猜它会像这样:

enter image description here

1 个答案:

答案 0 :(得分:0)

检查

function strposa($haystack, $needles=array(), $offset=0) {
    $chr = array();
    foreach($needles as $needle) {
            $res = strpos($haystack, $needle, $offset);
            if ($res !== false) $chr[$needle] = $res;
    }
    if(empty($chr)) return false;
    return min($chr);
}
  

如果要匹配多个域,只需将允许的域放入数组

$allowed_candidate_domain = array("school.edu","work.edu","otherdomain.edu"); //OR ["school.edu",...];
if (strposa(strtolower($user_email), $allowed_candidate_domain, 1)){
echo "domain allowed";
} else {
echo "domain disallowed";
}
  

如果您只想匹配一个域,请使用:

if (strpos(strtolower($user_email), "school.edu") === false){
// Email domain disallowed === FALSE
}
  

您也可以使用preg_match

if (!preg_match('(school.edu)', strtolower($user_email))){
// invalid/disallowed Candidate email
} else {
// Valid candidate email
}