パスワード再発行について
-
返信ありがとうございます。
通常パスワードの再発行はログインIDとメールアドレスのどちらかを入力すれば登録されているメールアドレスに再発行用のメールが届くと思いますがこちらのログインIDを入力しても再発行メールが届かないように設定したいのです。
メールアドレスのみを有効にしたいのですがプラグインやコードの編集で可能なのででしょうか?
WordPress コア内にあるログインID(ユーザー名)とメールアドレスを照合する処理を変更すれば可能ですが、そのためにコアのコードを修正する必要があるので、お勧めしません。
とりあえずコアのコードを修正するなら次のようになります(検証済み)。
wp-login.php:function retrieve_password() { // 中略 if ( empty( $_POST['user_login'] ) ) { // 中略 } elseif ( strpos( $_POST['user_login'], '@' ) ) { // 中略 } else { $login = trim($_POST['user_login']); $user_data = get_user_by('login', $login); //追加ここから $errors->add( 'cannot_use_username', __('<strong>ERROR</strong>: Cannot use any username.' ) ); //追加ここまで } // 中略 }
お勧めしないので、この修正を避ける方法があると良いのですが、可能かどうかわかりません。ざっと見ただけですがアクション
'login_form_lostpassword'
または'login_form_retrievepassword'
が利用できるかもしれません。
アクションが実行されるとき$_POST['user_login']
にユーザー名またはメールアドレスが入っているので、それに'@'
が含まれていなければ(メールアドレスでなければ)有り得ない何かの文字列に書き換えてしまえばよいかなと思います。ご教授いただきありがとうございます!
初心者なので質問ばかりで大変申し訳ございませんが、コアファイルの編集ということですが、fanctions.phpで修正できる方法はないということでしょうか?pecco0202さん、「fanctions.phpで修正できる方法」はアイデアだけありますが、検証していないのでダメかもしれません。アイデアとして書いたのが、一つ前の「アクション
'login_form_lostpassword'
または'login_form_retrievepassword'
が利用できるかも」の部分です。試してみました。
functions.phpにadd_action( 'allow_password_reset', 'disable_password_reset_except_email'); function disable_password_reset_except_email ( $bool, $user_id ) { global $_POST; $username = esc_html ( $_POST['user_login'] ); if(filter_var($username, FILTER_VALIDATE_EMAIL) === false) return false; return true; }
で行けそうですね。しかし、allow_password_resetのフック
wp-includes/user.php
* @param bool $allow Whether to allow the password to be reset. Default true.
* @param int $user_data->ID The ID of the user attempting to reset a password.
$allow = apply_filters( ‘allow_password_reset’, true, $user->ID );の$user には NULLしかデータないけど〜(ログインしていないのだからそうでしょうね)って感じで使えませんでした。これってバグ?….
ありがとうございます!
fanctions.phpにコード追加してみたらIDではパスワードがリセットされないようになりました!
うまくいってなによりでした。
あれからもう少し検証して
– http://kitaney-wordpress.blogspot.jp/2016/06/wordpressok.html
にまとめてみました。コードについても、上記だと、
—
パスワードリセットで入力されたユーザー名が電子メールアドレスなら許可。
実際のユーザー名は、電子メールアドレスでなくてもよい
(ユーザー名か電子メールアドレスのいずれかにヒットすればいい)
—
となります。実際のユーザー名も電子メールアドレス必須にしたければ、上記まとめのコードBを参考にしてみてください。
- トピック「パスワード再発行について」には新たに返信することはできません。