2011-09-10 3 views
3

Je rencontre des problèmes avec une validation de base nonce via une requête ajax.Wordpress nonce vérifier toujours faux

Ce sont mes chargeur de script et les fonctions chargeur CSS: (en gallery.php)

function gallery_js_loader() 
{ 
    if (!is_admin()) return; 
    // async flash uploader 
    wp_enqueue_script('swfobject', THEMEURL . "/lib/uploadify/swfobject.js", array(), false, true); 
    wp_enqueue_script('uploadify', THEMEURL . "/lib/uploadify/jquery.uploadify.v2.1.4.min.js", array('jquery'), false, true); 
    wp_enqueue_script('gallery_admin_scripts', THEMEURL . "/inc/galleries/gallery_admin_scripts.js", array(), false, true); 
    wp_localize_script('gallery_admin_scripts', 'param', 
        array(
         'basename' => GALLERYPOST, 
         'baselocation' => THEMEURL, 
         'nonce' => wp_create_nonce('file-upload-nonce'), 
         'thumb_width' => intval(get_option('thumbnail_size_w')), 
         'thumb_height' => intval(get_option('thumbnail_size_h')) 
        )); 
// main styles 


} 

function gallery_css_loader() 
{ 
    wp_enqueue_style('uploadify_styles', THEMEURL . "/lib/uploadify/uploadify.css"); 
    wp_enqueue_style('gallery_admin_styles', THEMEURL . "/inc/galleries/gallery_admin_styles.css"); 
} 

add_action('admin_print_scripts-post.php', 'gallery_js_loader'); 
add_action('admin_print_scripts-post-new.php', 'gallery_js_loader'); 
add_action('admin_print_styles-post.php', 'gallery_css_loader'); 
add_action('admin_print_styles-post-new.php', 'gallery_css_loader'); 


function gallery_upload_image() 
{ 
    $nonce = $_POST["nonce"]; 

    if (is_admin() && !empty($_FILES) /*&& wp_verify_nonce($nonce, 'file-upload-nonce')*/) { 
     require_once(ABSPATH . 'wp-admin/includes/image.php'); 

     $tempFile = $_FILES['Filedata']['tmp_name']; 
     //  $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/'; 
     $targetDir = wp_upload_dir(date('Y')); 
     $targetFile = $targetDir['path'] . '/' . $_FILES['Filedata']['name']; 
     $targetFile = str_replace(" ", "", $targetFile); 

     move_uploaded_file($tempFile, $targetFile); 

     $wp_filetype = wp_check_filetype(basename($targetFile), null); 

     $attachment = array(
      'post_mime_type' => $wp_filetype['type'], 
      'post_title' => preg_replace('/\.[^.]+$/', '', basename($targetFile)), 
      'post_content' => '', 
      'post_status' => 'inherit' 
     ); 
     $result['attachmet_id'] = $attach_id = wp_insert_attachment($attachment, $targetFile); 
     $result['recieved_nonce'] = $nonce; 

     $attach_data = wp_generate_attachment_metadata($attach_id, $targetFile); 
     wp_update_attachment_metadata($attach_id, $attach_data); 

     $result['success'] = true; 
    } else { 
     $result['success'] = false; 
     $result['recieved_nounce'] = $nonce; 
     $result['error'] = array(
      'message' => 'No files or you are not admin ' . $nonce, 
      'code' => 'E01' 
     ); 
    } 

    echo json_encode($result); 
    exit; 
} 

add_action('wp_ajax_do_upload', 'gallery_upload_image');  

Dans mon fichier javascrtip: (en gallery.js)

console.debug("Nonce received ",param.nonce); //c4817b947a 

Mon ajax appel accèdera à une action do_upload de php. Celui-ci ajoutera le champ nonce reçu la réponse ... (retour à gallery.php)

function gallery_upload_image() 
{ 
    $nonce = $_POST["nonce"]; 

    if (wp_verify_nonce($nonce, 'file-upload-nonce')) { 
     /* some logic here, nothing to do with nonce */ 
     $result['success'] = true; 
     $result['debugNonce'] = $nonce; 
    } // end validation 
    else { 
     //invalid nonce 
     $result['success'] = false; 
     $result['debugNonce'] = $nonce;   
    } 
} 

Le résultat reçu ressemble à ceci: c4817b947a { "succès": false, "debugNonce": » c4817b947a "}

Le premier c4817b947a est dû à l'écho de la fonction de génération de nonce. Cela n'influence pas la façon dont la validation se produit. Ma conclusion est que wp_verify_nonce échoue toujours. J'utilise wp 3.2.1 sur localhost, nouvelle installation, pas de plugins.

+0

J'ai le même problème depuis que j'ai joué avec set_transient. Comment pourrais-je m'en débarrasser? – niklas

+0

J'ai rencontré le même problème. J'ai remarqué que lorsque je ne suis pas connecté (ouverture du site en mode navigation privée), la vérification fonctionne. Je l'ai googlé de toutes les manières possibles et j'ai passé des jours à essayer de résoudre le problème sans succès. check_ajax_referer échoue également. Je cours également une nouvelle installation, essayée localement et sur un serveur en ligne.Mais ça ne peut pas être que ça ne marche pas toutes ces années ... Avez-vous trouvé la solution? –

Répondre

0

Je fais un échange presque identique sans problèmes. Ceci est dans un plugin (classe), mais cela ne devrait pas avoir d'importance.

PHP - initialiser le javascript:

add_action('wp_print_scripts', array(&$this, 'enqueue_script')); 

PHP - function enqueue_script:

wp_localize_script('B99-Portfolio', 'ajax', array( 'ajaxurl'  => admin_url('admin-ajax.php'), 
                'imgurl'  => content_url().'/uploads/portfolio-content/', 
                'requestNonce' => wp_create_nonce('b99-request-nonce'))); 

JS - ouvrir la requête Ajax:

$.ajax({ 
     type : 'POST', 
     cache : false, 
     url  : ajax.ajaxurl, 
     data : { 
      action   : 'b99_ajax_request_items', 
      requestNonce : ajax.requestNonce    
     }, 
     dataType: 'json', 
     error : function(jqXHR, textStatus, errorThrown) {alert(jqXHR+" "+textStatus+" "+errorThrown);}, 
     success : function(response) {recieveAjax(response);} 
     }); 

PHP - recieve et traiter la demande (function b99_ajax_request_items):

$nonce = $_POST['requestNonce']; 
     if (! wp_verify_nonce($nonce, 'b99-request-nonce')){ 
      die ('security fail'.$nonce); 
     } 

Assurez-vous que vous avez placé le script en file d'attente avant de le localiser. J'utilise les versions actuelles de jquery et wordpress et cela fonctionne de manière transparente sur une installation locale de XAMPP. Cela ressemble beaucoup à votre échange, mais c'est peut-être quelque chose à comparer.

+0

Merci pour votre réponse. J'ai mis à jour le code pour inclure la fonction complète qui charge js et css. Mon script est mis en file d'attente avant d'être localisé. Le nonce est reçu correctement, mais ne parvient pas à valider ... –

+1

À quelle action ajoutez-vous gallery_assets_loader()? Je sais qu'il y a au moins trois points d'insertion valides, j'utilise wp_print_scripts. Aussi, à quoi ressemble votre appel ajax? vous mentionnez do_upload du côté php, mais vous montrez gallery_upload_image(). À quoi ressemble votre échangeur complet? – Bosworth99

+0

Je suis désolé pour la relecture tardive, et j'apprécie vos efforts. J'ai mis à jour le code. S'il vous plaît, jetez un oeil. :) –

1

Je viens de rencontrer un similar issue et il s'est avéré que tout ce que j'avais à faire était de me reconnecter comme administrateur. Je pense que cela devrait également fonctionner dans votre cas, car tout le reste du code fourni semble aller bien.

Je suppose que cela a quelque chose à voir avec la façon dont les sessions sont traitées dans Wordpress.