Как внести в белый список почтовый домен и любые потенциальные субдомены для регистрации в WordPress

В настоящее время мы работаем над сайтом, который был разработан другой студией. Он работает на WordPress и использует плагин под названием UserPro для управления своими членами (логин, регистрация, профиль и т. д.)

Владельцы хотят, чтобы веб-сайт имел открытый доступ в целом, но некоторые части доступны только для членов. Поэтому они хотели, чтобы только пользователи с конкретными почтовыми доменами могли регистрироваться на сайте. Эта функция работает для доменов и определенных поддоменов, однако вскоре они узнали, что для поддоменов этого домена может существовать бесконечное количество возможностей. Таким образом, они должны разрешить кому-либо из любого потенциального субдомена этого почтового домена иметь право зарегистрироваться на веб-сайте.

Я приложил приведенный ниже код, чтобы вы могли увидеть, как он работает в настоящее время. Я редактировал URL-адреса для конфиденциальности владельцев, но остальная часть кода точно такая же.

case 'email_exists':
if (!is_email($input_value)) {
$output['error'] = __('Please enter a valid email.','userpro');
} else if (email_exists($input_value)) {
$output['error'] = __('Email is taken. Is that you? Try to <a href="#" data-                            template="login">login</a>','userpro');
}
else if($input_value){
$domain = strstr($input_value, '@');
$domains = array('@test.com' , '@test.net' , '@alpha.test.com' , '@beta.test.net', '@*.test.com', '@*.test.net');
if(!in_array($domain, $domains))
$output['error'] = __('Accounts with this email domain are not currently allowed automatic registration. You can request an account via the contact us page. ','userpro');
}
break;

Так что пробежать через это. Если у вас есть электронная почта @ test.com или @ test.net, она работает нормально. Если у вас есть электронное письмо в одном из указанных субдоменов, например, «@ alpha.test.com» или «@ beta.test.net», оно также отлично работает и позволяет зарегистрироваться.

Однако, если вы хотите подписаться на другой, например, @scar.test.com или @ delta.test.net, вы не сможете зарегистрироваться.

Я думал, что выполнение «@ *. Test.com» позволит любому возможному поддомену работать, но это явно не так. По крайней мере, не так, как я хочу.

Любая помощь по этому вопросу будет принята с благодарностью.

С Уважением,
Адам

0

Решение

Похоже, работа для регулярных выражений и preg_match(),

Существует несколько способов проверки, но в зависимости от ваших текущих требований только следующие 4 опции являются действительными окончаниями отправленного адреса электронной почты.

  • @ test.com
  • @ test.net
  • .test.com
  • .test.net

Это можно записать в регулярном выражении как (@|\.)test\.((com)|(net))$

Таким образом, чтобы обновить свой код, вы можете заменить,

else if($input_value){

// your code here

}

с,

else if (!preg_match('~(@|\.)test\.((com)|(net))$~i', $input_value)) {
$output['error'] = __('Accounts with this email domain are not currently allowed automatic registration. You can request an account via the contact us page. ','userpro');
}

Играть с регулярным выражением здесь https://regex101.com/r/JtUxmZ/5

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]