WordPress授权后发送Ajax表单

时间:2018-09-23 19:16:57

标签: ajax wordpress

在网站上,已授权使用标准方式。

如果在页面上显示<? Php echo get_current_user_id ()?>,它将输出授权用户(id)

但是如果通过AJAX

$.ajax({
    url: url,
    method: 'POST',
    processData: false,
    data : $formInfo.serialize(),
    cache: true,
    xhrFields: {
        withCredentials: true
    },

来自服务器的返回0,即未授权。我试图启用发送withCredentials: true cookie的功能,但是没有用。如何正确发送来自授权客户端的AJAX请求

在服务器上,我创建了自己的插件来接受AJAX请求。授权和注册工作已经完成。

    register_rest_route('wc/v2', 'users/set-info', array(
    'methods' => 'POST',
    'callback' => 'pl_user_endpoint_set_info',
));


function pl_user_endpoint_set_info($request = null) {
$response = array();
$parameters = $request->get_body_params();

$response['response'] = $parameters;
$response['message'] = get_current_user_id();
$response['cookie'] = $_COOKIE;// for test cookie

return new WP_REST_Response($response, 200);

}

该插件已在动作rest_api_init中注册

add_action('rest_api_init', 'pl_wp_rest_endpoints');

代码从表单发送到客户端,但是在处理参数之前,我将首先学习如何执行此操作,以便服务器了解客户端已获得授权。

来自服务器的响应:

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您发出AJAX请求,则var_dump (wp_get_current_user ())返回一个空数组。那些。没有用户。事实证明,wordpress只是认为此类请求未经检查,因此需要其他身份验证。在Authentication ajax rest处找到了解决方案。有必要在脚本nonce

中进行简单传输

在连接脚本后在function.php中:

wp_localize_script('my-script', 'wpApiSettings', array(
        'root' => esc_url_raw(rest_url()),
        'nonce' => wp_create_nonce('wp_rest')
    ));

AJAX请求:

$.ajax({
   url: url,
   method: 'POST',
   processData: false,
   data : $formInfo.serialize(),
   beforeSend: function ( xhr ) {
      xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
   },
....