WordPress的AACTFORM nonce失败

4ktjp1zp  于 2024-01-06  发布在  WordPress
关注(0)|答案(3)|浏览(174)

我在WordPress中有一个电子邮件表单,我正在使用它。
我在表单中创建一个nonce,并在发送电子邮件之前检查它。
nonce失败,但输出显示它是同一个nonce。
模拟代码:
电子邮件表单

  1. <form class="email-form" role="form">
  2. <div class="form-group">
  3. <label>Full Name</label>
  4. <input type="text" class="email-name input-lg"/>
  5. </div>
  6. <div class="form-group">
  7. <label>Email</label>
  8. <input type="text" class="email-email input-lg"/>
  9. </div>
  10. <input type="hidden" name="ajax-nonce" id="ajax-nonce" value="' <?php echo wp_create_nonce( 'email-nonce' ); ?>'" />
  11. <div class="form-group email-submit">
  12. <button class="btn-green email-submit">Send</button>
  13. </div>
  14. </form>

字符串
的js

  1. $('.email-submit').on('click', function(e){
  2. e.preventDefault();
  3. var mc_name = $('.email-name').val();
  4. var mc_email = $('.email-email').val();
  5. var mc_nonce = $('#ajax-nonce').val();
  6. alert(mc_nonce);
  7. classData = {
  8. 'type' : 'post',
  9. 'action' : 'classajax-submit',
  10. 'dataType' : 'jsonp',
  11. 'crossDomain' : true,
  12. 'nonce' : mc_nonce,
  13. 'the_name' : mc_name,
  14. 'the_email' : mc_email,
  15. }
  16. $.post(TheAjax.ajaxurl, classData).done(function(result){
  17. if(result == 'success') {
  18. //success message
  19. }
  20. }, 'jsonp');
  21. })


Functions.php

  1. add_action( 'wp_enqueue_scripts', 'add_my_script' );
  2. function add_my_script() {
  3. wp_enqueue_script('scripts',get_template_directory_uri() . '/js/compiled/main.min.js', array('jquery'));
  4. //
  5. wp_localize_script( 'scripts', 'TheAjax', array(
  6. 'ajaxurl' => admin_url( 'admin-ajax.php' )
  7. ));
  8. }
  9. add_action( 'wp_ajax_nopriv_classajax-submit', 'classajax_submit' );
  10. add_action( 'wp_ajax_classajax-submit', 'classajax_submit' );
  11. function classajax_submit() {
  12. $nonce = stripslashes($_POST['nonce']);
  13. echo 'nonce in php ' . $nonce;
  14. if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) {
  15. die ('Email Busted!');
  16. }else{
  17. }
  18. }

ni65a41a

ni65a41a1#

首先,你不需要创建隐藏字段,使用这个它会自动创建它

  1. <?php wp_nonce_field( 'your_action', 'put_name' ); ?>

字符串
在检查if(wp_verify_nonce( $_POST[ 'put_name' ], 'your_action' ))时,尝试以下操作

v64noz0r

v64noz0r2#

您可以使用 *check_aerodynamic_erodynamic *,文档中有一个示例:https://codex.wordpress.org/Function_Reference/check_ajax_referer

qybjjes1

qybjjes13#

你只是在这里做错了一点。更新后的nonce字段如下:

  1. <input type="hidden" name="ajax-nonce" id="ajax-nonce" value="<?php echo wp_create_nonce( 'email-nonce' ); ?>" />

字符串

相关问题