サポート » 使い方全般 » パスワード再発行について

  • ワードプレスのパスワード再発行を
    メールアドレスだけ再発行を有効にする方法は
    ありますか?

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • ご希望の内容をもう少し詳しく書いていただけませんか?

    スレッド開始 pecco0202

    (@pecco0202)

    返信ありがとうございます。

    通常パスワードの再発行はログイン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'] にユーザー名またはメールアドレスが入っているので、それに '@' が含まれていなければ(メールアドレスでなければ)有り得ない何かの文字列に書き換えてしまえばよいかなと思います。

    スレッド開始 pecco0202

    (@pecco0202)

    ご教授いただきありがとうございます!
    初心者なので質問ばかりで大変申し訳ございませんが、コアファイルの編集ということですが、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しかデータないけど〜(ログインしていないのだからそうでしょうね)って感じで使えませんでした。これってバグ?….

    スレッド開始 pecco0202

    (@pecco0202)

    ありがとうございます!

    fanctions.phpにコード追加してみたらIDではパスワードがリセットされないようになりました!

    うまくいってなによりでした。
    あれからもう少し検証して
    http://kitaney-wordpress.blogspot.jp/2016/06/wordpressok.html
    にまとめてみました。

    コードについても、上記だと、

    パスワードリセットで入力されたユーザー名が電子メールアドレスなら許可。
    実際のユーザー名は、電子メールアドレスでなくてもよい
    (ユーザー名か電子メールアドレスのいずれかにヒットすればいい)

    となります。実際のユーザー名も電子メールアドレス必須にしたければ、上記まとめのコードBを参考にしてみてください。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「パスワード再発行について」には新たに返信することはできません。