2016-09-29 18 views
0

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

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

Я приложил код ниже, чтобы вы могли видеть, как он работает в данный момент. Я редактировал 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», он также отлично работает и позволяет регистрироваться.

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

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

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

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

ответ

2

выглядит как работа для регулярных выражений и 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'); 
} 

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

+0

в вашем примере домены test.com и newtest.com возвращает тот же результат. – stweb

+0

Yep, была ошибкой в ​​моем коде - обновлена ​​- должна работать по мере необходимости – Steve

+0

Это сработало. Спасибо за ваш быстрый ответ, это было полезно и образовательным. Гораздо проще. Благодарю. –