admin管理员组文章数量:1417434
I'm making some API endpoints that require me to confirm who the user is, and what they can do, before I let them use the endpoint.
However, I can't seem to get the current user.
My endpoint:
function register_api_hooks() {
register_rest_route(
'bacon', '/user/',
array(
'methods' => 'POST',
'callback' => 'makinbacon',
)
);
}
function makinbacon(WP_REST_Request $request){
return json_encode(wp_get_current_user());
}
add_action( 'rest_api_init', 'register_api_hooks' );
My fetch in the client:
fetch('/wp-json/bacon/user', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
credentials: 'same-origin',
})
.then((response) => {
return response.json();
})
.then(function(json) {
console.log(json);
});
The fetch code is included in a normal wordpress page on the same domain and installation of wordpress as the API endpoint. Also, I am logged in as an admin user.
The result:
{"data":{},"ID":0,"caps":[],"cap_key":null,"roles":[],"allcaps":[],"filter":null}
So it seems that the endpoint in itself is working. I'm not getting any errors, and it does return what seems to be a user. Just that the user is empty.
What else I have tried:
As some answers in similar questions suggested, I have tried including the global $current_user
. This gave the same result.
function makinbacon(WP_REST_Request $request){
global $current_user;
return json_encode(wp_get_current_user());
}
I have also tried setting credentials
to include
in the fetch call, as well as trying to change both the fetch call and the endpoint to a GET request.
Everything gives the same empty user.
I also tried to do other things in the endpoint, like creating a post, updating a post, etc. That worked fine.
So far the only thing I haven't been able to do in the endpoint is to fetch information about the current user.
Any ideas?
I'm making some API endpoints that require me to confirm who the user is, and what they can do, before I let them use the endpoint.
However, I can't seem to get the current user.
My endpoint:
function register_api_hooks() {
register_rest_route(
'bacon', '/user/',
array(
'methods' => 'POST',
'callback' => 'makinbacon',
)
);
}
function makinbacon(WP_REST_Request $request){
return json_encode(wp_get_current_user());
}
add_action( 'rest_api_init', 'register_api_hooks' );
My fetch in the client:
fetch('/wp-json/bacon/user', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
credentials: 'same-origin',
})
.then((response) => {
return response.json();
})
.then(function(json) {
console.log(json);
});
The fetch code is included in a normal wordpress page on the same domain and installation of wordpress as the API endpoint. Also, I am logged in as an admin user.
The result:
{"data":{},"ID":0,"caps":[],"cap_key":null,"roles":[],"allcaps":[],"filter":null}
So it seems that the endpoint in itself is working. I'm not getting any errors, and it does return what seems to be a user. Just that the user is empty.
What else I have tried:
As some answers in similar questions suggested, I have tried including the global $current_user
. This gave the same result.
function makinbacon(WP_REST_Request $request){
global $current_user;
return json_encode(wp_get_current_user());
}
I have also tried setting credentials
to include
in the fetch call, as well as trying to change both the fetch call and the endpoint to a GET request.
Everything gives the same empty user.
I also tried to do other things in the endpoint, like creating a post, updating a post, etc. That worked fine.
So far the only thing I haven't been able to do in the endpoint is to fetch information about the current user.
Any ideas?
Share Improve this question asked Aug 6, 2019 at 8:36 AzerAzer 1211 silver badge6 bronze badges 2 |1 Answer
Reset to default 0Thanks to Jacob Peattie, I was able to solve this issue.
You have to include a nonce from the WordPress Javascript API in your REST API requests if you wish to use information about the current user.
From the WordPress documentation:
If no nonce is provided the API will set the current user to 0, turning the request into an unauthenticated request, even if you’re logged into WordPress.
In other words, the endpoint will get excecuted even without a nonce, but any attempt to fetch information about the current user will fail/result in an empty user object.
本文标签: javascriptGet user in rest API endpoint
版权声明:本文标题:javascript - Get user in rest API endpoint 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745263630a2650470.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
If no nonce is provided the API will set the current user to 0, turning the request into an unauthenticated request, even if you’re logged into WordPress.
– Azer Commented Aug 6, 2019 at 9:06