繁体   English   中英

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

[英]How to whitelist specific email domains during registration based on user role

我有一个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'));}

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

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

候选角色选择: LINE 213

电子邮件验证: LINE 398

编辑: 我非常感谢所有高级答案,但是我将需要知道如何在主题不中断任何内容的情况下将任何答案实现到当前registration.php文件中(当前使用子主题来防止这种情况)。 这意味着我需要知道将答案插入哪行,并且任何答案还需要使用registration.php文件中调用的功能。 我是PHP的新手,我想在不感到内gui的情况下“即插即用”,即使我寻求帮助,也无法自己完成。

编辑2: 如果我不得不基于我不存在的PHP知识和对编码逻辑的基本了解,在黑暗中全力以赴,那我会猜想是这样的:

在此处输入图片说明

检查一下

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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM