SummArg | Cursos y recursos para webmasters

23/03/2013

Permitir registro en WordPress sólo con correos de un determinado dominio

Una medida para evitar robots de spam o para asegurarnos que nuestros usuarios no vayan a tener problemas a la hora de recibir mails de activación cuando efectúan el registro en nuestro sitio WordPress, puede ser restringir el dominio del mail para generar una cuenta.

registrate

Con muy pocas líneas de código podemos forzar el registro sólo usando cuentas @gmail.com. Para ello primero vamos a nuestro theme y creamos un archivo form.js y lo colocamos dentro de una carpeta /scripts/. Acto seguido lo vinculamos a nuestra pantalla de login con el siguiente código en el functions.php:

function my_login_form() {
	wp_enqueue_script( 'form', get_template_directory_uri() . '/scripts/form.js', false );
}
add_action( 'login_enqueue_scripts', 'my_login_form', 1 );

Ahora debemos usar la magia de jQuery para tomar el input en donde se solicita el mail al usuario, acortarlo y colocar otro input al lado que muestre el value @gmail.com y que esté disabled para que los usuarios no puedan cambiarlo. A éste campo no le daremos otro uso mas que el estético.

Luego debemos tomar el valor que haya ingresado el usuario en el verdadero input de mail y, luego de que salga del estado focus, añadirle la cadena “@gmail.com” para que se envíe correctamente y sea validado por el servidor.

$(document).ready(function() {
		$('#user_email').css('width', '105px');
		$('#user_email').after('<input type="text" name="user_domain" id="user_domain" class="input" value="@gmail.com" size="5" disabled />');
		$('#user_domain').css('width', '145px');
		$('#user_email').focusout(function() {
			$('#user_email').val(
				$('#user_email').val() + '@gmail.com'
				);
			});
});

Por último les dejamos algunas recomendaciones, ya que este método que usamos para permitir el registro desde un solo dominio nos ayuda a modificar el formulario visualmente, pero no es muy seguro. Una opción, que la vimos en WordPress Answers, es incluir el siguiente snippet con los dominios permitidos en nuestro functions.php:

function is_valid_email_domain($login, $email, $errors ){
    $valid_email_domains = array("gmail.com","yahoo.com");// whitelist
    $valid = false;
    foreach( $valid_email_domains as $d ){
        $d_length = strlen( $d );
        $current_email_domain = strtolower( substr( $email, -($d_length), $d_length));
        if( $current_email_domain == strtolower($d) ){
            $valid = true;
            break;
        }
    }
    // if invalid, return error
    if( $valid === false ){
        $errors->add('domain_whitelist_error',__( '<strong>ERROR</strong>: you can only register using gmail or yahoo emails' ));
    }
}
add_action('register_post', 'is_valid_email_domain',10,3 );

O bien instalar el plugin User Domain WhiteList

Esta modificación nace de un pedido de un usuario en Foros del Web, si quieren ver los comentarios pueden visitarlo en este link.

Dejar un comentario

  1. ricardo

    Gracias Nekko!!

    Me parece super interesante esto, y respecto a esto te quiero preguntar, ademas de lo que indica el tutorial, hay alguna manera de personalizar la página de login? yo puedo cambiar el logo de wordpress y poner el mio añadiendo codigo en functions.php pero no se como puedo modificar el aspecto visual de esta paginita, es posible?

Dejar un comentario