Регистрация с ограниченным почтовым доменом, проверка PHP - PullRequest
0 голосов
/ 28 января 2019

У меня есть эта строка кода, которую я хочу применить к странице входа.Я хочу ограничить вход в систему только для пользователя с определенным доменным именем, например, "@ mycompany.com". Ни один другой пользователь не может зарегистрироваться без этого домена.

Но проблема в том, что я не могу заставить его работать,он пропускает все домены, которые я пробовал, и не возвращает ложь

Коды копируются и вставляются из двух разных подделок, один из которых не имеет правил для доменов, а второй - с правилами для доменов с ограниченным доступом (из строки "// проверить tld "), который я вставил и отредактировал.Где это идет не так, в настоящее время я не могу видеть, где?

     public static function validateUserEmail($user_email, $user_email_repeat)
    {
    if (empty($user_email)) {
        Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_FIELD_EMPTY'));
        return false;
    }

    if ($user_email !== $user_email_repeat) 
   {
        Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_REPEAT_WRONG'));
        return false;
    }

    // validate the email with PHP's internal filter
    // side-fact: Max length seems to be 254 chars
    // @see /282823/kakova-maksimalnaya-dlina-deistvuyschego-adresa-elektronnoi-pochty
    if (!filter_var($user_email, FILTER_VALIDATE_EMAIL)) {

        //validate tld
        $validTlds = str_replace(".", "\.", VALID_EMAIL_TLDS);
        $validTlds = "\.".str_replace(",", "|\.", $validTlds);

        //$validTlds = str_replace(",", "|\.", $validTlds);
        $emailArr = explode("@", $user_email);

        $emailTld = $emailArr[1];

        if ($emailTld !== 'mycompany.com')
        {
        Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_DOES_NOT_FIT_DOMAIN'));
        return false;

        }
        if (!preg_match('/^[-a-z0-9]+('.$validTlds.')\z/', strtolower($emailTld))) {

            //check main domain here
            $exValidTlds = explode(",", VALID_EMAIL_TLDS);
            $exValidTlds = array_map('trim', $exValidTlds);
            foreach($exValidTlds as $tld) {//if exist then

        if(!strstr($emailTld, ".".$tld)) {
        if($tld !== strrchr($emailTld, $tld)) {
        Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_DOES_NOT_FIT_PATTERN'));
        return false;
                    }
                }
            }
        Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_DOES_NOT_FIT_PATTERN'));
        return false;
        }
    }
        return true;
    }

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

    public static function validateUserEmail($user_email, $user_email_repeat)
{
    if (empty($user_email)) {
        Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_FIELD_EMPTY'));
        return false;
    }

    if ($user_email !== $user_email_repeat) {
        Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_REPEAT_WRONG'));
        return false;
    }

    // validate the email with PHP's internal filter
    // side-fact: Max length seems to be 254 chars
    // @see /282823/kakova-maksimalnaya-dlina-deistvuyschego-adresa-elektronnoi-pochty
    if (!filter_var($user_email, FILTER_VALIDATE_EMAIL)) {
        Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_DOES_NOT_FIT_PATTERN'));
        return false;
    }

    return true;
}

РЕДАКТИРОВАТЬ ...

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

        if (filter_var($user_email, FILTER_VALIDATE_EMAIL)) {
        $server = strstr($user_email, '@');
        if ($server !== '@mycompany.com') {
        Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_DOES_NOT_FIT_PATTERN'));
        return false;    
        }
    }

1 Ответ

0 голосов
/ 28 января 2019

Ваш оператор not находится не с той стороны переменной.Так и должно быть ...

if ($emailTld !== 'mycompany.com')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...