JQuery/AJAX在使用rest API时是否发送cookie,或者我是否需要以某种方式添加它们?

时间:2019-09-13 作者:Matthew Brown aka Lord Matt

我遇到了一个奇怪的情况user capabilities. 我在本地计算机上设置了一个rest端点,我是超级管理员。rest端点被调用,它所做的第一件事就是查看用户是否可以发表文章(因为这是调用的结果)。

我使用了以下代码:

    if(!current_user_can(\'publish_posts\')){
        return array(\'reply\'=>0,\'error\'=>\'Forbidden\',\'code\'=>\'403\');
    }
我收到了禁止的信息。我知道我已登录,因为表单隐藏在完全相同的支票后面。

客户端:

    var idata = {};
    idata[\'url\']    = form.find(\'#attachment\').val();
    idata[\'nOnce\']  = form.find(\'#nOnce\').val();
    // snip (etc.)
    jQuery.ajax({
        type: "POST",
        url: vars.path+\'/post\',
        data: JSON.stringify(idata),
        contentType: "application/json; charset=utf-8",
        crossDomain: true,
        dataType: "json",
        success: function (data, status, jqXHR) {
            // snip
        },

        error: function (jqXHR, status) {
            // snip
        }
    });
Cookie是否没有随AJAX调用一起发送(我使用的是jQuery客户端),如果没有,我如何确保它们也发送?

如何确保使用我的表单的用户被识别为当前用户?

1 个回复
最合适的回答,由SO网友:Mike Baxter 整理而成

不,您没有通过jQuery AJAX调用传递cookie。。当然不是通过跨域访问。

如果要使用jQuery传递数据,则需要传递当前用户ID并使用get_userdata($userid) 确定用户是否具有正确的功能。

服务器端:

$jQuery_user = get_userdata($_POST[\'user_id\']);
if(!user_can($jQuery_user,\'publish_posts\')){
   return array(\'reply\'=>0,\'error\'=>\'Forbidden\',\'code\'=>\'403\');
}
客户端:

// Be sure your form can somehow provide the currently logged in user id, hidden or otherwise.
var idata = {};
idata[\'url\']    = form.find(\'#attachment\').val();
idata[\'nOnce\']  = form.find(\'#nOnce\').val();
// if you have a nonce, you should be able to get user_id
iData[\'user_id\'] = jQuery(\'#user_id\').val(); 
// snip (etc.)
jQuery.ajax({
    type: "POST",
    url: vars.path+\'/post\',
    data: JSON.stringify(idata),
    contentType: "application/json; charset=utf-8",
    crossDomain: true,
    dataType: "json",
    success: function (data, status, jqXHR) {
        // snip
    },

    error: function (jqXHR, status) {
        // snip
    }
});