Registrasi pengguna diikuti oleh login otomatis

15

Saya menggunakan plugin yang dimodifikasi untuk keperluan saya.

Apa yang saya cari adalah setelah pengguna mendaftar untuk secara otomatis login dan mengembalikannya ke halaman saat ini. Saat ini mereka mengirimi mereka email dengan nama pengguna dan kata sandi mereka. Mereka kemudian harus masuk menggunakan perincian itu.

Robin I Knight
sumber
Apakah Anda menggunakan formulir pendaftaran standar atau kustom?
Bainternet
Yang khusus tetapi didasarkan pada arahan ulang sehingga kode yang dirancang untuk bekerja dengan sistem default mungkin berfungsi, dan jika tidak saya mungkin dapat memodifikasinya.
Robin I Knight
Saya pikir saya harus menunjukkan bahwa secara otomatis masuk pengguna pada pendaftaran menghindari bagian dari keamanan login. Biasanya, pengguna tidak dapat masuk tanpa memberikan alamat email yang valid. Pengguna perlu mendaftar, menerima email, lalu masuk. Jika Anda menghapus langkah email, pengguna Anda dapat mendaftar dengan alamat palsu, secara otomatis masuk, dan dapat mengakses backend, berkomentar, apa pun yang dapat dilakukan oleh pelanggan default Anda. Siapa yang akan mendapat manfaat? Spammer, salah satunya. Peretas juga akan senang mengaduk-aduk lubang di backend Anda tanpa harus memberikan alamat yang bisa mengungkapkan.
s_ha_dum
Blog terperinci: sforsuresh.in/auto-login-wordpress
Suresh Kamrushi

Jawaban:

10

Pada dasarnya untuk login pengguna dapat Anda gunakan:

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

tetapi itu hanya ketika Anda memiliki kata sandi dan login sehingga Anda dapat membuat formulir pendaftaran Anda sendiri dan memprosesnya dan membuat sendiri pengguna

//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 );

dan di sini kami memiliki kedua login dan kata sandi sehingga Anda dapat login pengguna.

Semoga ini membantu

Bainternet
sumber
2
Apakah tidak ada filter registrasi yang dapat dikaitkan?
Zack
1
Tricky, Ill, apakah saya bisa mengintegrasikannya. Tidak ada cara yang lebih mudah. Saya menganggapnya wordpress tidak tertarik untuk memberikan get_the_password () yang nyaman karena mengirim email yang keluar.
Robin I Knight
5

Tidak ada tempat yang ideal untuk menghubungkan ke proses pendaftaran. Saya pikir ada kasus yang kuat untuk menambahkan kait tindakan peristiwa pendaftaran pengguna ke inti. Tapi saya pikir Anda mungkin bisa memalsukannya, sementara itu. Salah satu hal terakhir yang terjadi ketika pengguna berhasil mendaftar, adalah pembuatan opsi pengguna bernama 'default_password_nag'. Kami dapat membuat tindakan untuk mengawasi itu, dan mengatur pengguna ketika sudah diatur.

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 );
}

Tidak teruji, tetapi seharusnya berhasil, secara teori.

Sekarang kita punya ide apa yang harus dilakukan, saya akan berpendapat bahwa saya pikir ini adalah ide yang buruk, keamanan-bijaksana. Orang-orang dapat membuat akun sampah tanpa harus melalui kesulitan mengatur dropbox email sampah. :)

Dougal Campbell
sumber
1
user_register adalah tempat yang cukup bagus untuk terhubung, untuk ini saya pikir?
jsims281
1

Saya baru saja berhasil membuat fungsionalitas itu bekerja menggunakan hook user_register dan kode berikut di functions.php saya :

// 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' );
jsims281
sumber
Haruskah ini masih mengirim email untuk mengonfirmasi pendaftaran? Saya tidak lagi menerima ini.
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);
}
ashraf mohammed
sumber
1
Harap berikan penjelasan beserta kode Anda.
s_ha_dum