如何使用Javascript库将WP REST API与自定义端点一起使用?

时间:2018-02-07 15:20:19

标签: javascript wordpress rest wp-api

我有一个自定义端点,它只返回一个测试字符串。我可以通过导航到mydomain.com/wp-json/mytools/v1/method/get_user_data来到达该端点并且它正确地返回我的测试字符串,但是,我希望能够使用Javascript到达该端点,并且,我读到wp-api自动处理身份验证所以我应该能够使用此方法获取当前登录用户。

我需要的是能够使用wp.api.mytools.method.get_current_user之类的东西并获取当前登录用户的信息。这甚至可能吗?

这是我创建端点的方式:

    register_rest_route( 'mytools/v1', '/method/(?P<method>[\w]+)', array(
        'methods' => 'GET',
        'callback' => 'invoke_method',
    ));

这是invoke_method函数:

function invoke_method( WP_REST_Request $request ) {
    return wp_get_current_user();
}

2 个答案:

答案 0 :(得分:1)

此功能已由WordPress在WP_REST端点'... / wp-json / wp / v2 / users / me实现。除了登录的cookie,WP REST身份验证还需要由查询参数'_wpnonce'指定的随机数。通过调用wp_create_nonce('wp_rest')生成此nonce的值。一个普通的WordPress前端页面将包含脚本... / wp-includes / js / api-request.js。此脚本将定义一个包含此nonce的全局wpApiSettings.nonce,以便您可以使用请求'... / wp-json / wp / v2 / users / me?_wpnonce ='+ wpApiSettings.nonce。所以,你可以使用jQuery.get()。

jQuery.get(
    '.../wp-json/wp/v2/users/me?_wpnonce=' + wpApiSettings.nonce,
    function( response ) {
        var userData = JSON.parse( response );
    ) }
);

如果您只想获得当前用户,我认为您不需要Backbone.js。 Backbone.js将使用CRUD同步集合和模型,你没有做任何这些。

答案 1 :(得分:0)

总的来说,是的,这是可能的。

具体来说,如果你wp-api引用了wp.api.mytools.method.get_current_user,那么它确实会处理身份验证。否则,您将需要使用Cookie,Nonce,Basic-Auth或JWT自己实现身份验证。

对于第二部分,绝对可以使用mytools之类的东西来获取信息。您需要的是客户端库(node-wpapi),并将其扩展为包含您的类和函数,例如methodchar buffer[512]; // or whatever size you deem is appropriate

希望这有助于澄清