如何禁止用户使用用户名中的特定单词注册?

时间:2017-03-03 作者:realtebo

从1个月前开始,每天我们都会收到数十个新用户注册,用户名包含YggrnCyhorgeVHAurizarCyhorgeVH, 等

Ip和用户代理每次都不同,所以我想避免使用这个名称注册用户。

Is there a hook/action/filter where to intercept the user registration and deny it?

请不要建议插件/验证码或其他。我提出了一个具体的问题。

2 个回复
最合适的回答,由SO网友:Juraj.Lorinc 整理而成

下面的代码应该适合您,但我不能保证这一点,因为您的表单定制得太多(而且很糟糕)。我已经在非定制注册表上进行了测试,效果很好。

function cyhorge_check_fields( $errors, $sanitized_user_login, $user_email ) {

    if ( preg_match(\'/(CyhorgeVH)/\', $sanitized_user_login ) ) {
        $errors->add( \'username_error\', __( \'<strong>ERROR</strong>: User contains CyhorgeVH string.\', \'my_textdomain\' ) );
    }

    return $errors;
}

add_filter( \'registration_errors\', \'cyhorge_check_fields\', 10, 3 );

SOURCE

EDIT: 另一种可能的解决方案:

function prevent_cyhorge_user( $user_login, $user_email, $errors ) {

    if ( strpos( $user_login, \'CyhorgeVH\' ) ) {
        $errors->add( \'username_error\', __( \'<strong>ERROR</strong>: User contains CyhorgeVH string.\', \'my_textdomain\' ) );
    }

}

add_action( \'register_post\', \'prevent_cyhorge_user\', 10, 3 );
请注意,第二个函数正在使用strpos 而不是preg_match 可能快一点,但是preg_match 如果需要,提供更大的灵活性。

两者都应该从任何一个主题functions.php 或者作为插件。

SO网友:Kristoffer M

为您的站点获取垃圾邮件过滤器-验证码、Wordfence等。一般安全性有助于防止此类情况。

相关推荐