WordPress メールアドレスによるログインを無効化

WordPress 4.5 からユーザー名に加えてメールアドレスによるログインが可能となりました。

そして、これはデフォルトで有効な状態です。確かにユーザー名を忘れた場合などは便利ではあります。しかし、メールアドレスは自分以外の人が知っている場合や、推測されやすいものであったりする場合もあり、安全性が低下すると考えます。ログイン専用のメールアドレスを作成するのも面倒ではあります。

そこでメールアドレスによるログインを無効にする方法を紹介します。

メールアドレスによるログインを無効化

単純に無効にするだけであれば、下記のコードを functions.php に追加するだけです。

remove_filter( 'authenticate', 'wp_authenticate_email_password', 20 );

ログインフォームのラベルの変更

上記のコードでメールアドレスによるログインは無効化されるのですが、ログインフォームの「ユーザー名またはメールアドレス」ラベルは変更されません。

ログインフォームを表示する wp_login_form テンプレートタグでは login_form_defaults フィルターフックでこのラベルを変更することができます。

function my_login_form_defaults( $defaults ) {
	$defaults['label_username'] = __( 'Username' );
	return $defaults;
}

add_filter( 'login_form_defaults', 'my_login_form_defaults' );

ただし、ログインページのログインフォームは wp_login_form テンプレートタグを使用しておらず、login_form_defaults フィルターフックも有効ではありません。

適当なフックも用意されていないため、仕方ないので gettext フィルターフックで変更します。

function my_gettext_login( $translated_text, $text, $domain ) {
	if ( 'wp-login.php' === $GLOBALS['pagenow'] ) {
		if ( $domain == 'default' && $text === 'Username or Email Address' ) {
			$translated_text = __( 'Username' );
		}
	}
	return $translated_text;
}

add_filter( 'gettext', 'my_gettext_login', 20, 3 );

親切なエラーメッセージ

序に、ログインページでのログインに失敗したときのエラーメッセージが親切過ぎる(無効なユーザー名の場合は「ユーザー名が無効です。」、有効なユーザー名を入力してパスワードが間違えた場合は「ユーザー名 taro のパスワードが間違っています。」など)ので変更します。

下記コードを追加することで、エラーメッセージが不親切(?)になります。

function my_login_errors( $error_message ) {
	return '<strong>エラー</strong>: ユーザー名またはパスワードが間違っています。';
}

add_filter( 'login_errors', 'my_login_errors' );

追記

XO Security プラグイン(バージョン 2.0.0)に、上記機能(メールアドレスによるログインの無効化およびログイン エラー メッセージの汎用化)を組み込みました。

コメントを残す

メールアドレスが公開されることはありません。

日本語でコメントを入力してください。(スパム対策)