为您的WordPress Rest API进行身份验证 | 作者:Gemma Black - Medium
如果您正在管理区域内开发一个单页应用程序(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 需要知道当前用户的身份才能正确验证权限。以下是两种实现方式:
- Cookie:当您在管理区域时,WordPress 会自动设置 Cookie。
- 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
最新文章
- 通过 SEO rank API 获取百度关键词排名
- 音乐情绪可视化:Cyanite.ai 音乐情感分析API如何帮助我们理解音乐
- 从Flask到FastAPI的平滑迁移
- 什么是 API 即服务?
- 5大API故障原因可能正在干扰您的集成工作
- 如何获取Perplexity AI API Key 密钥(分步指南)
- 轻松翻译网页内容:Python 实现 kimi网页版 翻译功能
- 身份证OCR识别API在Java、Python、PHP中的使用教程
- 精通.NET Web API:构建强大API的最佳实践
- Flask、FastAPI 与 Django 框架比较:Python Web 应用开发教程
- 十大 API 安全供应商
- REST API接口命名的最佳实践