ユーザー登録とそれに続く自動ログイン


15

目的に合わせて変更されたプラグインを使用しています。

私が望んでいるのは、ユーザーが自動的にログインして現在のページに戻すためにユーザーが登録した後です。現時点では、ユーザー名とパスワードを記載したメールを送信します。次に、それらの詳細を使用してログインする必要があります。


デフォルトの登録フォームを使用していますか、それともカスタムのフォームを使用していますか?
Bainternet

カスタムの1つですが、リダイレクトに基づいているため、デフォルトのシステムで動作するように設計されたコードは動作する可能性があり、そうでない場合はおそらく変更できます。
ロビンIナイト

登録時にユーザーに自動的にログインすると、ログインセキュリティの一部が回避されることを指摘する必要があります。通常、ユーザーは有効なメールアドレスを入力しないとログインできません。ユーザーは登録し、メールを受信して​​ログインする必要があります。電子メールのステップを削除すると、ユーザーは偽のアドレスで登録し、自動的にログインし、デフォルトのサブスクライバーができることを何でもバックエンド、コメントにアクセスできるようになります。誰が恩恵を受けますか?スパマー、1つ。ハッカーは、バックエンドの穴を探し回って、明らかにする可能性のあるアドレスを指定する必要もありません。
s_ha_dum

回答:


10

基本的にユーザーをログインさせるには、次を使用できます。

            //Login the user
    $creds = array();
    $creds['user_login'] = $login;
    $creds['user_password'] = $password;
    if ( !empty( $remember ) ){ 
        $creds['remember'] = true;
    }
    $user = wp_signon( $creds, true );

しかし、それはあなたがパスワードとログインを持っているときのみですので、あなたはあなた自身の登録フォームを作成し、それを処理し、自分でユーザーを作成することができます

//Only after Everything has been validated, proceed with creating the user
        //Create the user
        $user_pass = wp_generate_password();
        $user = array(
            'user_login' => $username,
            'user_pass' => $user_pass,
            'first_name' => $firstname,
            'last_name' => $lastname,
            'user_email' => $email
        );
        $user_id = wp_insert_user( $user );

        /*Send e-mail to admin and new user - 
        You could create your own e-mail instead of using this function*/
        wp_new_user_notification( $user_id, $user_pass );

ここにはログインとパスワードの両方があるため、ユーザーをログインできます。

お役に立てれば


2
フックできる登録フィルターはありませんか?
ザック

1
トリッキー、統合できるかどうか確認します。簡単な方法はありません。私はそれがそれを電子メールで送信するので、wordpressは素敵で便利なget_the_password()を提供することに興味がないと思います。
ロビンIナイト

5

登録プロセスに参加する理想的な場所はありません。ユーザー登録イベントアクションフックをコアに追加するのは強力なケースだと思います。しかし、その間にあなたはそれを偽造できるかもしれないと思います。ユーザーが正常に登録されたときに最後に発生することの1つは、「default_password_nag」という名前のユーザーオプションの作成です。それを監視するアクションを作成し、設定されたらユーザーを設定できます。

add_action('update_user_metadata', 'my_auto_login', 10, 4);

function my_auto_login( $metaid, $userid, $key, $value ) {
    // We only care about the password nag event. Ignore anything else.
    if ( 'default_password_nag' !== $key  && true !== $value) {
        return;
    }

    // Set the current user variables, and give him a cookie. 
    wp_set_current_user( $userid );
    wp_set_auth_cookie( $userid );
}

理論的にはテストされていませんが、動作するはずです。

これで何をすべきかがわかったので、セキュリティに関してはこれは悪い考えだと思います。ジャンクメールドロップボックスを設定する手間をかけることなく、ジャンクアカウントを作成できます。:)


1
user_registerは、フックするのに非常に良い場所です。
jsims281

1

user_registerフックを使用してその機能を動作させることができました、私に次のコードのfunctions.phpを

// auto log in a user who has just signed up       
function auto_login_new_user( $user_id ) {
  wp_set_auth_cookie( $user_id, false, is_ssl() );
}
add_action( 'user_register', 'auto_login_new_user' );

登録を確認するためにメールを送信する必要がありますか?私はもはやこれを受けていません。
codecowboy

0
function login_after_register($userlogin,$userpass){
    $credentials = array( 'user_login' =>  $userlogin, 'user_password' => $userpass, 'remember' => true );

    $secure_cookie = is_ssl();

    $secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
    add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);

    $user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
    wp_set_auth_cookie($user->ID, $credentials["remember"], $secure_cookie);
    do_action('wp_login', $user->user_login, $user);
}

1
コードとともに説明を提供してください。
s_ha_dum
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.