워드프레스 사이트에 가입할 때 사용자 아이디와 이메일 도메인 제한

워드프레스 회원제 사이트를 운용할 때 가입자의 ‘사용자 아이디’와 ‘이메일’에 관하여 최소한의 제어가 필요한데, 기본으로 특정 문자 아이디와 일부 기호, 이메일 규칙 정도의 검증을 제외하면 까다롭지 않습니다.

사용자 아이디

워드프레스는 방문자가 사이트에 가입할 때 사용자 아이디 규칙을 느슨하게 제어합니다. 예를 들어, 다음과 같은 단어를 아이디로 사용해도 제한하지 않는다는 뜻입니다.

wordpress, guest, youtube, facebook, moneytwitter

또, 사용자 아이디 ‘문자 수’를 제한하지 않아 다음처럼 허술한 아이디를 입력해도 제한하지 않습니다.

a, g, gu, se, he, b, c, d, ….

이메일

방문자가 가입할 때 입력하는 이메일의 특정 기호를 워드프레스는 제한하지 않습니다. 예를 들어, + 또는 . 기호 사용은 지메일에서 하나의 계정으로 많은 이메일 계정을 표현할 수 있는 방법입니다. 물론, . 기호를 포함한 이메일이 실제 고유 이메일일 수도 있습니다.

구글메일주소 규칙으로 워드프레스 유저 무한 생성

register_post vs. registration_errors

워드프레스의 회원가입 페이지에서 방문자가 입력하는 사용자 아이디와 메일 등의 데이터를 처리하는 훅으로 register_post가 있습니다. 그러나, 사용자의 추가 검증 규칙(custom validation rules)에 이 훅을 사용하지 말고, registration_errors 훅을 사용할 것을 코덱스에서 안내하고 있습니다.

따라서, 이 포스트에서 registration_errors 훅을 사용하여 회원가입 페이지에서 방문자가 입력하는 사용자 아이디와 이메일 정보를 간략한 기준으로 제한해봅니다. 간단합니다.

사용자 아이디 제한

회원가입할 때 방문자가 등록하려는 사용자 아이디에 관하여 제한해봅니다.

특정 단어의 사용자 아이디 제한

다음 단어와 같은 사용자 아이디 사용을 제한한다고 가정합니다.

wordpress, facebook, google

워드프레스 8 - 무료 이미지 저장소

다음 코드를 사용하는 테마의 functions.php 파일 등에 추가합니다.

add_action( 'registration_errors', 'custom_register_restrict', 10, 3 );
function custom_register_restrict( $errors, $sanitized_user_login, $user_email ) {

    $usernames = array( 'wordpress', 'facebook', 'google' );    

    if ( in_array( $sanitized_user_login, $usernames ) ) {
        $errors->add('사용할 수 없는 이름', __( '<strong>오류</strong>: 사용할 수 없는 이름 <span style="color:red">' . esc_html( $sanitized_user_login ) . '</span>.' ));
    }
    
    return $errors;

}

워드프레스 회원가입 페이지에서 사용자명에 ‘wordpress’를 입력하고 이메일을 입력한 후 가입 버튼을 클릭하면 다음 그림처럼 코드에서 정의한 오류 메시지를 출력합니다.

워드프레스 사용자 아이디 제한
사용자 아이디 제한

코드에 있는 facebook, google을 입력해도 마찬가지입니다.

사용자 아이디 문자 수 제한

사용자 아이디 문자 수를 영어, 숫자, 기호 기준으로 5자 이상으로 제한해봅니다. 다음 코드를 추가하면 간단하게 해결할 수 있습니다.

add_action( 'registration_errors', 'custom_register_restrict', 10, 3 );
function custom_register_restrict( $errors, $sanitized_user_login, $user_email ) {

    if ( strlen( $sanitized_user_login ) < 5 ) {
        $errors->add('영어, 숫자, 기호 기준으로 최소 5자 이상', __( '아이디는 영어, 숫자, 기호 기준 최소 5자 이상.' ));
    }
    
    return $errors;

}

사용자 아이디에 ‘aaaa’ 입력한 후 가입 버튼을 클릭하면 다음 그림의 안내를 볼 수 있습니다.

사용자 아이디 문자 수 제한
사용자 아이디 문자 수 제한

기호를 포함하여 다양하게 시도해 볼 수 있습니다.

이메일 주소 제한

이메일 주소에서 @ 기호를 기준으로 이메일 계정에 특정 기호가 포함된 때와 특정 이메일 도메인 사용을 제한해봅니다.

특정 이메일 도메인 제한

워드프레스 관리페이지에서 스팸회원으로 의심할 수 있는 계정의 이메일을 보면 다음 이메일 도메인을 사용한 때가 많습니다. 이런 이메일 도메인을 제한하면, 스팸회원을 막는 효과도 있음을 몇 년간 경험하였습니다. 더 있지만, 생략합니다.

yahoo.com, hotmail.com, mail.ru, aol.com, youtube.com

다음 코드를 사용하면 지정한 이메일 도메인을 사용하는 가입을 제한할 수 있습니다.

add_action( 'registration_errors', 'custom_register_restrict', 10, 3 );
function custom_register_restrict( $errors, $sanitized_user_login, $user_email ) {

    $email = explode( '@', $user_email );
    $domains = array( 'yahoo.com', 'hotmail.com', 'mail.ru', 'aol.com', 'youtube.com' );
    
    if ( in_array( $email[1], $domains ) ) {
        $errors->add('사용할 수 없는 메일 도메인', __( '사용할 수 없는 메일 도메인입니다.' ));
    }
    
    return $errors;

}

예를 들어, ‘yahoo.com’ 도메인이 이메일 주소에 포함되어 있다면 다음 그림의 안내를 출력합니다.

이메일 도메인 제한
이메일 도메인 제한

코드에서 입력한 다른 이메일 도메인을 입력하고 확인해도 마찬가지입니다.

이메일 계정에 특정 기호 제한

이메일 주소의 @ 왼쪽 이메일 아이디에 특정 기호가 포함될 때 제한할 수 있는데, 역시 다음 코드로 간단하게 처리할 수 있습니다.

add_action( 'registration_errors', 'custom_register_restrict', 10, 3 );
function custom_register_restrict( $errors, $sanitized_user_login, $user_email ) {

    $email = explode( '@', $user_email );
    $symbol = array( '+', '*', '!', '`', '~','%' );
    
    foreach( $symbol as $rs ) {
        if ( strpos( $email[0], $rs ) !== false ) {
            $errors->add('사용할 수 없는 기호', __( esc_html( $rs ) . ' 기호가 있는 메일 아이디는 사용할 수 없습니다.' ));
        }
    }
    
    return $errors;

}

+ 기호를 사용할 때의 예를 다음 그림에서 볼 수 있습니다.

특정 기호가 있는 이메일 제한
특정 기호가 있는 이메일 제한

. 기호는 실제 이메일 계정으로 사용한 때가 많으므로 제한할 때 주의해야 합니다.

다음 링크의 페이지에서 전체 코드를 간단한 플러그인 형식으로 정의한 파일을 받을 수 있습니다.

다른 기준을 정하여 회원 데이터 기준을 직접 정의해보세요.

어떤 의견이 있거나 궁금한 무언가 있다면 다음 링크의 사이트를 이용하세요.

이메일로 소식 받기

이메일로 새로운 포스트를 받으려면 아래에 이메일 주소를 입력하고, 구독합니다! 버튼을 클릭하세요. 그리고 입력한 이메일 계정에 접속하여 구독 확인 메일 내용을 확인하세요.