サポート » 使い方全般 » ログインの時に、ユーザー名ではなく、メールアドレスでログインできる

  • 解決済 bristar

    (@bristar)


    ログイン画面は、現状だとユーザー名を入力することで
    ログインできるようになっていますが、これを
    ユーザー名ではなく、メールアドレスでログインできるようにしたいです。

    メールアドレスでログインできるプラグイン(force email login)を発見したのですが、
    個人的に合わなかったので、コードでの実現を検討しました。

    そこで、コードを探したところ、
    kachibito.netさんで以下のようなコードを見つけました。
    http://kachibito.net/wordpress/using-an-email-address.html

    function login_with_email_address($username) {
            $user = get_user_by('email',$username);
            if(!empty($user->user_login))
                    $username = $user->user_login;
            return $username;
    }
    add_action('wp_authenticate','login_with_email_address');

    ただし、このコードだと
    メールアドレスとユーザー名の両方でログインできる状態になります。

    希望としましては、ログインの方法をメールアドレスだけにしたいと考えています。

    また、プラグインではなく、コードでの実現を考えています。

    もし、わかる方がいらっしゃいましたら、よろしくお願い致します。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • モデレーター Takuro Hishikawa

    (@hissy)

    $user = get_user_by('email',$username);
    ここで入力値を元にユーザーを取得していますね。

    if(!empty($user->user_login))
    次に取得したユーザーが正しいかどうかチェックしています。ユーザーが取得できた場合は

    $username = $user->user_login;
    ユーザーIDでメールアドレスを上書きしています。

    return $username;
    結果的にWordPressに渡るのはメールアドレスの場合でもユーザーIDというわけです。

    この処理を改変して、メールアドレスからユーザーが取得できなかった場合は、空の値を返せばよいでしょうね。

    かんたんですのでやってみてください。

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

    hissyさんのアドバイスをもとに
    いろいろといじってみたのですが、
    うまく機能しませんでした。

    私の理解が足りていないのですが、
    最初に示したコードに対して
    ユーザー名を入力した時に
    そのユーザー名でのログインを機能させないために、
    ユーザー名のほうに制限をかける、
    という認識でしょうか?

    初歩的な質問で申し訳ないです。

    モデレーター Takuro Hishikawa

    (@hissy)

    かちびとさんのところから転載されているコードは

    1. ログイン画面で入力された文字列をメールアドレスとして持つユーザーをデータベースから探す
    2. ユーザーが存在したら、そのユーザー名でログイン画面で入力された文字列を上書きする
    3. ユーザーが存在しなかったら、ログイン画面で入力された文字列は素通り(素通りなので、正しいユーザー名であればログインできる)

    という処理です。
    この 3. を「ユーザーが存在しなかったら、ログイン画面で入力された文字列を空の文字列で上書きする」とすればいいですね。

    hissyさん、遅くなってしまい申し訳ありませんでした。

    3を具体的にどうしてよいか結局わからず、
    いろいろと試してしまったという状況です。

    空の文字列となると以下のような形かと思いましたが、
    以下のようにすると、ユーザー名でもメールアドレスでも
    入れなくなりました。

    function login_with_email_address($username) {
            $user = get_user_by('email',$username);
            if(!empty($user->user_login))
                    $username = $user->user_login;
            return "";
    }
    add_action('wp_authenticate','login_with_email_address');
    モデレーター Takuro Hishikawa

    (@hissy)

    たぶん、難しく考えすぎでしょうね。あるいは、else の使い方をご存知ないのかな。

    function force_email_login($username) {
    	$user = get_user_by( 'email', $username );
    	if (!empty($user->user_login)) {
    		$username = $user->user_login;
    	} else {
    		$username = '';
    	}
    	return $username;
    }
    add_action( 'wp_authenticate', 'force_email_login' );

    しかし、プラグインではなくコードで実現されたいということでしたが、なぜなのか不思議です。これくらいのコードは理解して書かないと、コピペで実現してしまうと、もし将来のバージョンでこのコードに不具合が出た時に自分で修正できないですよ。

    hissyさん
    コードを教えていただき、ありがとうございます。

    コードを教えていただいたのはありがたいのですが、
    このコードを貼りつけたところ、
    ユーザー名でもメールアドレスでも入れなくなりました。

    私が難しく考えてしまっている部分もあるかと思いますが、
    どのようにすればよいでしょうか?

    モデレーター Takuro Hishikawa

    (@hissy)

    こちらでは一応ログインできましたが、どういう状態ですか?エラーになる?正しいメールアドレスで入れない?

    hissyさん
    私の調べが足りないようでした。
    hissyさんのコードでメールアドレスのみ
    ということが出来るようになりました。

    原因が追求しきれなかったので
    なんともいえないですが、
    機能はしましたので、ご報告させていただきます。

    原因や理由は発見次第、
    こちらでご報告させていただきたいです。

    一応、トピックは解決出来ましたので、
    勝手ながら解決済みにさせてください。

    ありがとうございました。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「ログインの時に、ユーザー名ではなく、メールアドレスでログインできる」には新たに返信することはできません。