email авторизация пользователей

Вход в админку через email вместо логина

Здравствуйте, иногда пользователи забывают свои логины (имя пользователя) — было бы хорошо разрешить им входить в админку через email вместо логина, в данной статье мы рассмотрим плагин для решения данного вопроса, а также КОД (хук), который позволит заменить данный плагин или расширить его функции.

Скачать исходники для статьи можно ниже

1. Плагин WP Email Login

Сведения о плагине:
Загрузок: 82,015
Последнее обновление: 2014-12-10
Сайт плагина: «wordpress.org/plugins/wp-email-login/»
Плагин переведен на русский язык.
Настроек у плагин нет — установить, активировать — и плагин работает.

После установки плагина пользователи смогут заходить на сайт в админку, используя как логин, так и email:

вход в wordpress по email

2. Код (хук), который позволяет не использовать плагин.

Заходим в админку wordpress, в левом меню выбираем пункт «Внешний вид» и его подпункт «Редактор», справа в списке шаблонов выбираем файл — functions.php и вставляем в него (в самый низ) следующий код:

//remove wordpress authentication
remove_filter('authenticate', 'wp_authenticate_username_password', 20);


add_filter('authenticate', function($user, $email, $password){
 
    //Check for empty fields
        if(empty($email) || empty ($password)){        
            //create new error object and add errors to it.
            $error = new WP_Error();
 
            if(empty($email)){ //No email
                $error->add('empty_username', __('<strong>ERROR</strong>: Email field is empty.'));
            }
            else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ //Invalid Email
                $error->add('invalid_username', __('<strong>ERROR</strong>: Email is invalid.'));
            }
 
            if(empty($password)){ //No password
                $error->add('empty_password', __('<strong>ERROR</strong>: Password field is empty.'));
            }
 
            return $error;
        }
 
        //Check if user exists in WordPress database
        $user = get_user_by('email', $email);
 
        //bad email
        if(!$user){
            $error = new WP_Error();
            $error->add('invalid', __('<strong>ERROR</strong>: Either the email or password you entered is invalid.'));
            return $error;
        }
        else{ //check password
            if(!wp_check_password($password, $user->user_pass, $user->ID)){ //bad password
                $error = new WP_Error();
                $error->add('invalid', __('<strong>ERROR</strong>: Either the email or password you entered is invalid.'));
                return $error;
            }else{
                return $user; //passed
            }
        }
}, 20, 3);

Здесь соответственно можно поменять сообщения об ошибках на английском языке — на русский:
ERROR: Email field is empty.
ERROR: Email is invalid.
ERROR: Password field is empty.
ERROR: Either the email or password you entered is invalid.

После этого страница входа будет выглядеть так:

email авторизация пользователей

Хотя на странице входа написано ввести «Имя пользователя», однако, после нашего кода — войти можно только по email, вот что будет написано если воспользоваться логином:

вход через email в админку вместо логина

Можно воспользоваться данным код в целях безопасности…

Но мы создаем данную форму для удобства пользователей, поэтому нам нужно заменить в форме входа «Имя пользователя» на «Email», а для этого нам нужно вставить в файл functions.php еще немного кода:

function username_or_email_login() {
	if ( 'wp-login.php' != basename( $_SERVER['SCRIPT_NAME'] ) )
		return;

	?><script type="text/javascript">
	// Form Label
	if ( document.getElementById('loginform') )
		document.getElementById('loginform').childNodes[1].childNodes[1].childNodes[0].nodeValue = '<?php echo esc_js( __( 'Email', 'email-login' ) ); ?>';

	// Error Messages
	if ( document.getElementById('login_error') )
		document.getElementById('login_error').innerHTML = document.getElementById('login_error').innerHTML.replace( '<?php echo esc_js( __( 'username' ) ); ?>', '<?php echo esc_js( __( 'Email' , 'email-login' ) ); ?>' );
	</script><?php
}
add_action( 'login_form', 'username_or_email_login' );

После чего наша страница входа в админку wordpress будет уже выглядеть так:

форма входа в админку через email

На этом все, удачи!

Введите свой email адрес для того, чтобы подписаться на мой блог:


knopkisoc

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *