为您的WordPress Rest API进行身份验证 | 作者:Gemma Black - Medium

作者:API传播员 · 2025-12-09 · 阅读时间:4分钟

如果您正在管理区域内开发一个单页应用程序(SPA),您一定不希望任何人都能随意访问您的端点。本文将为您提供一份简明的操作指南,帮助您为 WordPress REST API 实现身份验证,确保端点安全。


先决条件

在开始之前,请确保满足以下条件:

  • 您需要了解如何创建 WordPress REST 端点。
  • 您已经安装了 WordPress。

以下是 register_rest_route 方法的一个最简单示例:

$options = [
    'methods' => 'GET',
    'callback' => function() {
        return 'This is a protected route. Hi there!';
    }
];
  • methods 参数:指定 HTTP 请求方法(如 GET、POST 等)。
  • callback 参数:定义一个函数,用于返回数据或执行操作。

然而,上述回调函数并未受到任何保护,任何人都可以访问该路由并获取允许的数据。


如何保护您的端点?

要保护端点,只需添加一个 permission_callback 参数。该参数是一个返回布尔值的函数,用于指示当前用户是否有权限访问回调。

$options = [
    'methods' => 'GET',
    'callback' => function() {
        return 'This is a protected route. Hi there!';
    },
    'permission_callback' => function() {
        return false;
    }
];

在上述代码中,由于 permission_callback 返回 false,因此没有人可以访问该路由。


允许特定用户访问

WordPress 提供了一个名为 current_user_can 的全局函数,用于检查当前用户的权限。您可以利用它来限制特定用户访问端点。

$options = [
    /*....*/
    'permission_callback' => function() {
        return current_user_can('edit_others_posts');
    }
];

在这个示例中,只有具有 edit_others_posts 权限的用户才能访问该路由。如果用户仅具备 activate_plugins 权限,而不具备 edit_others_posts 权限,他们将无法访问。


告诉 WordPress 当前用户是谁

尽管通过权限函数可以保护路由,但 WordPress 需要知道当前用户的身份才能正确验证权限。以下是两种实现方式:

  1. Cookie:当您在管理区域时,WordPress 会自动设置 Cookie。
  2. Nonce:您需要在请求头中发送一个随机数(Nonce),通常以 X-WP-Nonce 的形式传递。

如果您使用 Fetch API,您的请求代码可能如下:

fetch('/wp-json/myplugin/v1/author/hi', {
    credentials: 'include',
    headers: {
        'content-type': 'application/json',
        'X-WP-Nonce': wpApiSettings.nonce
    }
});

在页面中添加 wp_rest 随机数

为了生成并传递 Nonce,可以通过以下方式将其添加到页面的 JavaScript 文件中:

add_action('admin_init', function() {
    wp_localize_script('custom-js-file', 'wpApiSettings', array(
        'root' => esc_url_raw(rest_url()),
        'nonce' => wp_create_nonce('wp_rest')
    ));
});

在上述代码中,wp_create_nonce 函数用于生成一个符合 WordPress 标准的随机数。


总结

通过以上步骤,您可以有效保护 WordPress REST API 的端点,确保只有经过身份验证的用户才能访问敏感数据或执行操作。如果您在管理区域内开发单页应用程序,这种方法尤其重要。

如果您有任何疑问或发现文中有未提及的内容,请随时留言或联系我,我会尽快为您解答。

原文链接: https://medium.com/@GemmaBlack/authenticating-your-wordpress-rest-apis-84d8775a6f87