2017-11-09 5 views
0

Ich benutze register_new_user($user_login, $user_email) für die Registrierung von Benutzern auf meiner Wordpress-Website. Aber sein gibt mir Fehler wieWordpress Registrieren Neue Benutzerfunktion gibt Fehler

{ "Fehler": true, "message": { "Fehler": { "registerfail": [ "Fehlende Sicherheit Token von Unterwerfung."]} "ERROR_DATA": [

Ich habe auch wp_nonce_field für die Sicherheit in meiner Form verwendet. Kann mir jemand helfen, diesen Fehler zu beheben "Fehlendes Sicherheitstoken von der Übermittlung."

Hier ist mein HTML FORM `

<form id="registration_form" action="<?php echo home_url('/'); ?>" method="POST"> 
<div class="form-field"> 
<span class="screen-reader-text"><?php _e('Username', 'wp-ajax-login'); ?></span> 
<input class="form-control input-lg required" name="pt_user_login" type="text" placeholder="<?php _e('Username', 'wp-ajax-login'); ?>" /> 
</div> 
<div class="form-field"> 
<span class="screen-reader-text"><?php _e('Email', 'wp-ajax-login'); ?></span> 
<input class="form-control input-lg required" name="pt_user_email" id="pt_user_email" type="email" placeholder="<?php _e('Email', 'wp-ajax-login'); ?>" /> 
</div> 

<div class="form-field"> 
<input type="hidden" name="action" value="pt_register_member"/> 
<button class="btn btn-theme btn-lg" data-loading-text="<?php _e('Loading...', 'wp-ajax-login') ?>" type="submit"><?php _e('Sign up', 'wp-ajax-login'); ?></button> 
</div> 
<?php wp_nonce_field('ajax-register-nonce','user-register-security'); ?> 
</form> 

AJAX CODE: // Get Variablen

$user_login = $_POST['pt_user_login']; 
    $user_email = $_POST['pt_user_email']; 

    // Check CSRF token 
    if(!check_ajax_referer('ajax-register-nonce', 'user-register-security', false)){ 
     echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.__('Session token has expired, please reload the page and try again', 'wp-ajax-login').'</div>')); 
     die(); 
    } 

    // Check if input variables are empty 
    elseif(empty($user_login) || empty($user_email)){ 
     echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.__('Please fill all form fields', 'wp-ajax-login').'</div>')); 
     die(); 
    } 

    $errors = register_new_user($user_login, $user_email); 

    if(is_wp_error($errors)){ 
     //Display errors 
    } 

`

+0

können Sie den Code zeigen, was haben Sie noch getan (vor allem die HTML für das Formular registrieren) – Yamu

+0

@Yamu bitte überprüfen, bearbeitet meine Frage – Arslan

+0

können Sie Ihre ajax functions.php Code? – vel

Antwort

0

die folgende Zeile in der Ajax-Code ersetzen

if(!check_ajax_referer('ajax-register-nonce', 'user-register-security', false)) 

mit

if(!check_ajax_referer('user-register-security', 'ajax-register-nonce', false)) 

HINWEIS: Der Name der Aktion ist der zweite Parameter anstelle der ersten

Referenz: wp_nonce_field

+0

Wenn Sie meinen Code sehen, bekomme ich keinen Fehler von check_ajax_referer Funktion. Ich bekomme einen Fehler von der Funktion register_new_user. – Arslan

0

Versuchen Sie, dieses

$user_login = $_POST['pt_user_login']; 
$user_email = $_POST['pt_user_email']; 

// Check CSRF token 
if(!check_ajax_referer('user-register-security', 'ajax-register-nonce', false)){ 
    echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.__('Session token has expired, please reload the page and try again', 'wp-ajax-login').'</div>')); 
    die(); 
} 

// Check if input variables are empty 
elseif(empty($user_login) || empty($user_email)){ 
    echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.__('Please fill all form fields', 'wp-ajax-login').'</div>')); 
    die(); 
} 

$errors = register_new_user($user_login, $user_email); 

if(is_wp_error($errors)){ 
    //Display errors 
} 

Beispiel https://codex.wordpress.org/Function_Reference/wp_nonce_field

<form method="post"> 
    <!-- some inputs here ... --> 
    <?php wp_nonce_field('name_of_my_action', 'name_of_nonce_field'); ?> 
</form> 


<?php 

if ( 
    ! isset($_POST['name_of_nonce_field']) 
    || ! wp_verify_nonce($_POST['name_of_nonce_field'], 'name_of_my_action') 
) { 

    print 'Sorry, your nonce did not verify.'; 
    exit; 

} else { 

    // process form data 
} 
+0

Ich testete Ihren Code, kein Fehler von check_ajax_referer Funktion oder Nonce-Feld. Ich bekomme einen Fehler von register_new_user Funktion – Arslan

+0

über dem Code, der von mir funktioniert. Kannst du Ajax Javascript auch posten? – vel

0

Sie können die Nonce-Variable auch mit der Methode wp_verify_nonce() überprüfen.

So sollte folgendes Ihr, wenn die Bedingung

if (wp_verify_nonce($_POST['user-register-security'], 'ajax-register-nonce')) { 
     // valid nonce. 
     // other code. 
} 
else{ 
    // invalid nonce, do appropriate action. 
} 

Bitte lassen Sie uns wissen, wenn Sie weitere Hilfe benötigen.

0

Ich habe Alternative zu Register_new_user() -Funktion gefunden. Hier ist der Arbeitscode für neue Benutzer-Registrierung:

// Get variables 
    $user_login = $_POST['pt_user_login']; 
    $user_email = $_POST['pt_user_email']; 

    // Check CSRF token 
    if(!check_ajax_referer('ajax-register-nonce', 'user-register-security', false)){ 
     echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.__('Session token has expired, please reload the page and try again', 'wp-ajax-login').'</div>')); 
     die(); 
    } 

    // Check if input variables are empty 
    elseif(empty($user_login) || empty($user_email)){ 
     echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.__('Please fill all form fields', 'wp-ajax-login').'</div>')); 
     die(); 
    } 


    if(null == email_exists($user_email)) { 
     // Generate the password and create the user 
     $password = wp_generate_password(12, false); 
     $user_id = wp_create_user($user_login, $password, $user_email); 

     // Set the nickname 
     wp_update_user(
     array(
      'ID'   => $user_id, 
      'nickname' => $user_email 
     ) 
    ); 

     // Set the role 
     $user = new WP_User($user_id); 
     $user->set_role('contributor'); 

     // Email the user 
     //wp_mail($user_email 'Welcome!', 'Your Password: ' . $password); 
     echo json_encode(array('error' => false, 'message' => '<div class="alert alert-success">'.__('Registration complete. Please check your e-mail.', 'wp-ajax-login').'</p>')); 
      die(); 
    } // end if 
    else 
    { 
     echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.__('This email already exists.Please use different email address.', 'wp-ajax-login').'</div>')); 
     die(); 
    } 

Dank an alle, die auf meine Frage geantwortet, ich habe Ihre Codes getestet, aber es gibt kein Problem mit wp_nonce oder Nonce Wert überprüfen. Ich denke, dass das Problem auf ein Plugin zurückzuführen ist, das den Hook registration_errors benutzt, um Fehler hinzuzufügen.

Verwandte Themen