WordPress REST API手册(四 | 5):验证

Cookie 身份验证是 WordPress 附带的标准身份验证方法。当您登录仪表板时,这会为您正确设置 cookie,因此插件和主题开发人员只需要登录用户即可。

但是,REST API 包含一种称为nonces的技术来避免CSRF问题。这可以防止其他网站在没有明确意图的情况下强迫您执行操作。这需要对 API 进行稍微特殊的处理。

对于使用内置 Javascript API 的开发人员,这会自动为您处理。这是将 API 用于插件和主题的推荐方式。自定义数据模型可以扩展wp.api.models.Base以确保为任何自定义请求正确发送。

对于发出手动 Ajax 请求的开发人员,需要随每个请求传递随机数。API 使用随机数并将操作设置为wp_rest. 然后可以通过_wpnonce数据参数(POST 数据或在 GET 请求的查询中)或通过X-WP-Nonce标头将这些传递给 API。如果没有提供随机数,API 会将当前用户设置为 0,将请求变成未经身份验证的请求,即使您已登录 WordPress。

注意:直到最近,大多数软件对DELETE请求的支持参差不齐。例如,PHP 不会将请求的请求正文DELETE转换为超级全局。因此,提供随机数作为标头是最可靠的方法。

请务必记住,此身份验证方法依赖于 WordPress cookie。因此,此方法仅适用于在 WordPress 内部使用 REST API 并且当前用户已登录的情况。此外,当前用户必须具有适当的能力来执行正在执行的操作。

例如,这是内置 Javascript 客户端创建 nonce 的方式:

<?php
wp_localize_script( 'wp-api', 'wpApiSettings', array(
    'root' => esc_url_raw( rest_url() ),
    'nonce' => wp_create_nonce( 'wp_rest' )
) );

然后在基本模型中使用它:

options.beforeSend = function(xhr) {
    xhr.setRequestHeader('X-WP-Nonce', wpApiSettings.nonce);
 
    if (beforeSend) {
        return beforeSend.apply(this, arguments);
    }
};

这是使用 jQuery AJAX 编辑帖子标题的示例:

$.ajax( {
    url: wpApiSettings.root + 'wp/v2/posts/1',
    method: 'POST',
    beforeSend: function ( xhr ) {
        xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
    },
    data:{
        'title' : 'Hello Moon'
    }
} ).done( function ( response ) {
    console.log( response );
} );

请注意,您不需要验证 nonce 在您的自定义端点内是否有效。这是自动为您完成的
rest_cookie_check_errors()

身份验证插件

虽然 cookie 身份验证是 WordPress 中唯一可用的本地身份验证机制,但可以添加插件以支持可从远程应用程序工作的替代身份验证模式。一些示例插件是OAuth 1.0a 服务器应用程序密码JSON Web 令牌


《WordPress REST API手册》完整目录:

THE END
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片