我正在使用WP REST API和AngularJS创建一个单页应用程序。在使用nonce解决问题后this question, 现在我面临着另一个问题。为了测试添加字段并使其免受未登录用户的影响,我尝试创建一个自定义字段,该字段公开wp_verify_nonce
if (isset($_SERVER[\'HTTP_X_WP_NONCE\'])) {
$nonce = $_SERVER[\'HTTP_X_WP_NONCE\'];
$nonce_verified = wp_verify_nonce($_SERVER[\'HTTP_X_WP_NONCE\'], \'wp_rest\');
}
return array(\'nonce\' => $nonce,
\'nonce_verified\' => $nonce_verified);
当然,这是一种考验,并将继续下去。一旦暴露,也会暴露
nonce_verified
. 此时,我尝试登录/注销一个用户,并要求该端点和用户/我。但碰巧的是,我的nonce总是通过登录或注销的用户进行验证。执行此操作时,Nonce本身会发生变化;尽管如此,当注销时,它的整个生命周期都是一样的。
为了创建nonce,我使用了一个本地化的代码,就像我之前的问题一样:
wp_localize_script(\'angularjs\', \'params\', array(
\'nonce\' => wp_create_nonce(\'wp_rest\'),
));
这是通过javascript传递的,正如我在关于AngularJS的教程中看到的。虽然此nonce得到验证,但查询到
users/me
如预期,未记录时会导致403。
我的理论是,正在为未登录的用户创建一个nonce,因此总是有一个有效的nonce可用。我应该使用is_user_logged_in()
? 或者我应该把临时创作挂在什么地方?非常感谢。