Kullanıcı kaydı ve ardından otomatik giriş


15

Benim amacım için değiştirilmiş bir eklenti kullanıyorum.

Ne sonra kullanıcı otomatik olarak oturum açmak ve geçerli sayfaya dönmek için kayıt olduktan sonra. Şu anda kullanıcı adlarını ve şifrelerini içeren bir e-posta gönderiyor. Daha sonra bu ayrıntıları kullanarak giriş yapmak zorundadırlar.


varsayılan kayıt formunu mu yoksa özel bir form mu kullanıyorsunuz?
Bainternet

Özel bir ama yönlendirmelere dayanmaktadır, bu nedenle varsayılan sistemle çalışmak için tasarlanmış kodlar iyi çalışabilir ve eğer değilse muhtemelen değiştirebilirim.
Robin I Knight

Ben bir kullanıcı otomatik olarak kayıt giriş oturum açma güvenliğini bir kısmını atlatmak gerektiğini düşünüyorum. Genellikle, kullanıcı geçerli bir e-posta adresi girmeden giriş yapamaz. Kullanıcının kaydolması, bir e-posta alması ve ardından oturum açması gerekir. E-posta adımını kaldırırsanız, kullanıcılarınız sahte adreslerle kaydolabilir, otomatik olarak giriş yapabilir ve varsayılan aboneleriniz ne yaparsa yapın arka uca yorum yapabilir, yorum yapabilir. Kimler yararlanabilir? Spam gönderenler, birincisi. Bilgisayar korsanları, açıklayıcı olabilecek bir adres vermek zorunda kalmadan arka ucunuzdaki delikler için uğraşmayı da severler.
s_ha_dum

Yanıtlar:


10

Temel olarak, bir kullanıcıyı oturum açmak için şunları kullanabilirsiniz:

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

ancak bu yalnızca şifreniz ve giriş bilgileriniz olduğunda kendi kayıt formunuzu oluşturabilir ve işleyebilir ve kullanıcıyı kendiniz oluşturabilirsiniz

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

ve burada hem giriş hem de şifre var, böylece kullanıcıyı giriş yapabilirsiniz.

Bu yardımcı olur umarım


2
Bağlanabilecek bir kayıt filtresi yok mu?
Zack

1
Zor, entegre edip edemeyeceğimi göreceğim. O zaman daha kolay bir yol yok. Ben wordpress o e-posta olarak güzel uygun bir get_the_password () sağlama ilgisi yoktur.
Robin I Knight

5

Kayıt işlemine katılmak için ideal bir yer yok. Çekirdeğe bir kullanıcı kaydı olay eylem kancası eklemek için güçlü bir durum olduğunu düşünüyorum. Ama bu arada taklit edebileceğinizi düşünüyorum. Bir kullanıcı başarıyla kaydolduğunda gerçekleşen son şeylerden biri, 'default_password_nag' adlı bir kullanıcı seçeneğinin oluşturulmasıdır. Bunu izlemek için bir eylem oluşturabilir ve ayarlandığında kullanıcıyı ayarlayabiliriz.

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

Teorik olarak test edilmedi, ancak çalışmalı.

Şimdi ne yapacağımız hakkında bir fikrimiz olduğuna göre, bunun kötü bir fikir olduğunu düşünüyorum, güvenlik açısından. İnsanlar, önemsiz bir e-posta dropbox'ı kurma zahmetinden bile geçmeden gereksiz hesaplar oluşturabilir. :)


1
user_register takılmak için oldukça güzel bir yer, bunun için bence?
jsims281

1

Sadece kullanarak çalışan bu işlevselliği almak başardınız user_register kanca ve benim aşağıdaki kodu 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' );

Bu yine de kaydı onaylamak için bir e-posta göndermeli mi? Artık bunu almıyorum.
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
Lütfen kodunuzla birlikte açıklamalar sağlayın.
s_ha_dum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.