我正在WordPress
+ WooCommerce
和Android
应用程序上构建一个网上商店,该商店从WooCommerce REST API检索数据。我在JWT上使用WooCommerce
的REST API来获取有关产品,类别等的信息,还可以下订单,添加到购物车等。
这很好,如果您拥有管理员的OAuth 1.0a凭据,但是,我使用的是客户的JWT。我让WordPress
接受了此身份验证方法(通过我的插件)。
如果我向http://SERVER/wp-json/wc/v3/products/categories
发出请求,则会收到此错误:
{
"code": "woocommerce_rest_cannot_view",
"message": "Вы не можете просматривать список ресурсов.",
"data": {
"status": 403
}
}
我正在传递Authentification: Bearer "JWT"
,而WordPress
接受它,但是WooCommerce
没有给我任何信息。
我如何使WordPress
接受我的JWT:
function test_rest_user($result, $th, $request){
$secret_key = defined('JWT_AUTH_SECRET_KEY') ? JWT_AUTH_SECRET_KEY : false;
$auth = $request->get_header_as_array("Authorization");
if ($auth){
$token = explode(" ", $auth[0])[1];
$user = api::exchange_token_to_wp_user($token, $secret_key);
if ($user){
set_current_user($user->data->ID);
}
}
}
add_filter("rest_pre_dispatch", "test_rest_user", 10, 3);
此问题的主要主题是WooCommerce
不接受JWT。这是来自WordPress
REST API和客户的JWT(http://SERVER/wp-json/wp/v2/users/me
)的响应:
{
"id": 7,
"name": "test",
"url": "",
"description": "",
"link": "http://SERVER/author/test/",
"slug": "test",
"avatar_urls": {},
"meta": [],
"_links": {
"self": [
{
"href": "http://SERVER/wp-json/wp/v2/users/7"
}
],
"collection": [
{
"href": "http://SERVER/wp-json/wp/v2/users"
}
]
}
}
答案 0 :(得分:0)
所以,我会临时解决。我做了一个函数,该函数挂钩了WooCommerce
REST API权限,您可以Google
来做到这一点。它从woocommerce_rest_check_permissions
过滤器中挂接。只需检查用户是否登录并提供对方法的访问即可。很简单!