如何在wp-json FETCH请求中使用Cookie/会话身份验证?

时间:2019-01-01 作者:Ross Rogers

我写了一个/wp-json 类似路径:

add_action( \'rest_api_init\', function () {
  register_rest_route( \'myplugin\', \'foo\', array(
    \'methods\' => \'GET\',
    \'callback\' => function( $data ) {
      // if (!is_user_logged_in()) {
      //   return array();
      // }
      return array(\'dummy_data\');
    }
  ) );
} );
我可以使用es6样式检索数据fetch api 例如:

fetch(\'/wp-json/myplugin/foo\', {credentials: \'include\'})
  .then(res => res.json())
  .then(data => console.log(data))
这很管用。

然而,如果我对if (!is_user_logged_in())... 检查,它永远不会通过。我发送Cookie 此请求中的标头,但wordpress似乎不执行cookie/会话样式的身份验证和is_user_logged_in() 从来都不是真的。

我知道有nonce机制,但这个API只能从wordpress站点获取,我想使用cookie/session机制。

当请求来自时,如何根据用户的服务器会话对用户进行身份验证fetch 还是xhr API javascript mehanism?

1 个回复
最合适的回答,由SO网友:Ross Rogers 整理而成

在阅读了更多内容后,由于雅各布的链接和更多的谷歌搜索,wordpress的“nonces”实际上并不是nonces。Nonces are to be used once, 但wordpress的“nonces”可以被无限次地用于2个“tick”,这通常意味着在12到24小时之间。这些wordpress“nonce”实际上与一个会话相关联,因此可以提供我想要的内容,因为我可以在一段时间内重用wordpress“nonce”。