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.
J'ai le même problème depuis que j'ai joué avec set_transient. Comment pourrais-je m'en débarrasser? – niklas
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? –