带有自定义 API Rest Endpoint 的 WordPress 和 JWT
Posted
技术标签:
【中文标题】带有自定义 API Rest Endpoint 的 WordPress 和 JWT【英文标题】:WordPress and JWT with custom API Rest Endpoint 【发布时间】:2018-01-24 11:07:33 【问题描述】:我需要为 WordPress 提供一个插件,该插件将具有很少的自定义 API 端点,并且我已经安装了这两个插件
WordPress REST API V2 JWT-Auth我已经创建了自定义端点:
add_action('rest_api_init', function ($data)
register_rest_route('mladi-info/v1', '/user/favorites', [
'methods' => 'GET',
'callback' => 'mi_get_favorite_posts'
]);
);
我需要保护这个端点,以便只有那些发送了 JWT 令牌的请求(使用 /wp-json/jwt-auth/v1/token 端点发送用户名和密码生成)才能被处理,否则它应该返回 401 状态代码。我该怎么做?
【问题讨论】:
与您的问题无关,但如果您正在寻找一种快速设置和测试内容的方法,请观看我创建的此视频:youtu.be/Mp7T7x1oxDk 【参考方案1】:您应该在注册新路由时添加 permission_callback 参数。
add_action('rest_api_init', function ($data)
register_rest_route('mladi-info/v1', '/user/favorites',
array(
'methods' => 'GET',
'callback' => 'mi_get_favorite_posts',
'permission_callback' => function ($request)
if (current_user_can('edit_others_posts'))
return true;
)
);
);
JWT Auth 插件将根据标头中的令牌值将用户对象提供给 permission_callback 函数,您需要做的就是在该函数内部制定一些“权限逻辑”,这将返回一个 bool 值。
在我发布的解决方案中,只有当访问它的用户具有“edit_others_posts”功能时,回调才允许访问 REST 端点——管理员和编辑就是这种情况。
【讨论】:
很抱歉碰到这个问题,但是有没有办法从 functions.php 对 JWT 插件运行 validate() 方法,而不连接到 api?像 $f = new JWT_Auth(); 这样的东西$f->validate($token)? 我不知道,抱歉。不确定您的用例是什么,但也许您可以发送服务器端 HTTP 发布请求以使用 cURL 验证令牌?【参考方案2】:在保护端点时,使用 JWT-auth 插件的实际方法只是为其添加正确的命名空间前缀,然后发送 Bearer 标头令牌,以便可以成功访问资源。
在你的情况下是:
add_action('rest_api_init', function ($data)
register_rest_route('jwt-auth', 'mladi-info/v1/user/favorites', [
'methods' => 'GET',
'callback' => 'mi_get_favorite_posts'
]);
);
然后只需向该端点发送一个经过身份验证的请求,记住发送您通过在您的标头中使用 /token 端点(您发送用户名和密码以取回 jwt 令牌)获得的 Bearer 令牌。即。
fetch('https://your-domain.com/wp-json/jwt-auth/mladi-info/v1/user/favorites',
method: 'GET'
mode: 'cors',
headers:
'Authorization': `Bearer $jwt-token`
,
);
【讨论】:
以上是关于带有自定义 API Rest Endpoint 的 WordPress 和 JWT的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire - 带有自定义标头的 Rest API 调用
用于银行交易中预期目的的带有自定义发票编号的 PayPal Rest API 付款
Wordpress 如何使用 python 和 REST API 获取高级自定义字段内容
如何让 Laravel 返回 JSON REST API 的自定义错误
python ServiceNow REST附件API示例Python示例使用/ now / attachment / file endpoint将文件作为附件发布(上载)到inc