Используем e-mail вместо имени пользователя для входа на сайт

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

Во-первых, я хочу извиниться, что почти три недели (!) ничего не писал на блоге, просто сейчас очень много дел навалилось, обещаю, что вскоре снова начну публиковать посты регулярно.

А теперь к делу. Приведу в пример сайт deviantart.com, взгляните на их форму входа пользователей. Как видите, они предлагают ввести либо логин либо e-mail, прикольно.

Реализовать это на WorPress на самом деле проще простого, достаточно вставить этот кусок кода в fucntions.php текущей темы.

// удаляем стандартный фильтр
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
 
// и добавляем собственный
add_filter( 'authenticate', 'login_by_email', 20, 3 );
 
function login_by_email( $user, $username, $password ) {
	// если введен логин, то сразу авторизуем, минуя лишние запросы
	if ( is_email( $username ) ) {
		// получаем ID пользователя 
		if ( ! empty( $username ) )
			$user = get_user_by( 'email', $username );
 
		// подбираем соответствующее емейлу имя пользователя (логин)
		if ( isset( $user->user_login, $user ) )
			$username = $user->user_login;
 
	}
	return wp_authenticate_username_password( NULL, $username, $password );
}

Теперь смотрите, код выше позволяет пользователям входить на сайт вписывая и логин и e-mail. А что если дать им возможность входа только при помощи e-mail, а при помощи имени пользователя — запретить?

Немного видоизменяем функцию:

function login_by_email( $user, $username, $password ) {
	// если введен логин, то отправляем лесом
	if ( !is_email( $username ) ) 
		return;
 
	// получаем ID пользователя 
	if ( ! empty( $username ) )
		$user = get_user_by( 'email', $username );
 
	// подбираем соответствующее емейлу имя пользователя (логин)
	if ( isset( $user->user_login, $user ) )
		$username = $user->user_login;
 
	return wp_authenticate_username_password( NULL, $username, $password );
}

Теперь, если какой-нибудь чувак захочет войти и при этом введет имя пользователя, а не email, то он наткнется на сообщение об ошибке.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии