WordPress中文开发手册

  1. Home
  2. Docs
  3. WordPress中文开发手册
  4. WordPress REST API手册
  5. 使用REST API
  6. 认证

认证

Cookie验证

Cookie认证是包含的标准认证方法WordPress。当您登录到仪表板时,这将正确设置Cookie对于你来说,插件和主题开发者只需要登录用户。

然而,REST API包括一种名为nonces的技术来避免CSRF问题。这样可以防止其他站点强制您未明确地执行操作打算这样做这需要稍微特别处理API。

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

对于开发手工Ajax请求的开发人员,需要传递该随机数与每个请求。 API使用的是将动作设置为wp_rest的随机数。这些然后可以通过_wpnonce数据参数(POST)传递给API数据或查询GET请求),或通过X-WP-Nonce头。

注意:直到最近,大多数软件对DELETE请求都有很多支持。 对于例如,PHP不会将DELETE请求的请求体转换为超级全球。 因此,将随机数作为标题提供是最可靠的方法。

重要的是要记住,这种认证方法依赖于WordPress
饼干。 因此,此方法仅在内部使用REST API时适用
的WordPress和当前用户登录。此外,当前用户必须
具有执行正在执行的动作的适当能力。

例如,这是内置的JavaScript客户端如何创建的随机数:

<?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 );
} );

认证插件

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