web-dev-qa-db-ja.com

新規ユーザーのメール確認

登録時に新規ユーザーにEメールへの返信、Eメールアドレスの確認を要求するプラグインを実装したいと思います。私はすでに大規模なコーデックスの調査をしていますが、私は非常に新しいので、いくつかのヒントを感謝します。あとは自分で管理します。

5
ProfK

私は先日解決した非常によく似た問題を抱えていました。私の場合は、ユーザーが自分のパスワードを選択してから、電子メールで自分のアカウントをアクティブにすることを許可したいと思いました。これにはたくさんのことがあるので、電子メールの確認をどのように達成したかを概説します。

まず、私はuser_register(ユーザーが登録されたときに実行されます)を使用してキーを作成し(例えば、時間、ユーザーのメールアドレス、ランダムな文字列など)、このキーをusermetaテーブルに格納しました。ユーザーが自分のアカウントをアクティブにすると、これは削除されます。

アクティブになっていないユーザーがログインできないようにするために、フックauthenticateを使用してログインに特別なチェックを追加しました。例えば:

編集 コメントに従って、 authenticate フィルタは失敗した場合はWP_Errorオブジェクトを返します。それ以外の場合はnullを返します。 wp_authenticate_username_password はこの関数の後に実行され、WP_Userオブジェクトが渡された場合、認証チェックは実行されず、実行されたと見なされます。

編集されたコードは、渡されたものをすべて返します。または、アクティベーションキーが存在する場合(つまり、ユーザーはまだ自分のアカウントをアクティブにしていない場合)、WP_Errorオブジェクトを返します。

add_filter( 'authenticate', 'wpse32218_check_for_key', 10, 3 );
function wpse32218_check_for_key( $user, $username, $password ){
    $user_obj = get_user_by('login', $username );

    if ($username!=''){
        $value = get_user_meta($user->ID, 'confirmed', true);
        if($value!=null){
            $user = new WP_Error( 'denied', __("<strong>ERROR</strong>: You need to activate your account.".$value."") );//create an error
            remove_action('authenticate', 'wp_authenticate_username_password', 20); //key found - don't proceed!
        }
    }
    return $user;
}

shake_error_codesを使用すると、キーが見つかった場合にログインボックスを振ることができます。

次に、あなたのプラグインで、 wp_new_user_notification (これは/wp_includes/pluggable.phpにあるプラグ可能な関数です)をオーバーライドする必要があります。この機能は、新しいユーザーと管理者にEメールを送信します。

内部のプラグインに関数をコピーしてください

if ( !function_exists('wp_new_user_notification') ) :
    //Define your wp_new_user_notification function here
endif;

そしてそれを適応させるので、それはユーザーへのメッセージからアクティベーションキーを検索して含めます。

私が働いていたプロジェクトのために、私はユーザーが彼らのアカウントをアクティブにするためにクリックできるアクティベーションキーからのリンクを作りました。例えば、それらのキーが01234ABCDEの場合: http://www.example.com?confirm=01234ABCDE

フィルタquery_varsを使ってWordPressに変数confirmを登録しました。それからtemplate_includeフィルタを使って、その変数が設定されるたびに(例えば上記のように)私はユーザをconfirm.php(私のテーマディレクトリにあるテンプレートファイル)にリダイレクトします。

このテンプレートは、対応するキーを使用してユーザーを取得しようとします。見つかった場合は、キーを削除します。これでアクティブになり、ログインできるようになりました。そうでない場合、エラーメッセージが表示されます(キーが存在しないか、アカウントが有効になっています)。同じアクティベーションキーを持つ複数のユーザーがいる場合(そうではありません!)、エラーもスローされます。

10
Stephen Harris