验证用创建的nonce时遇到问题wp_create_nonce() 在html表单中名为nonce的隐藏输入中:
<input type="hidden" name="nonce" value="<?php echo wp_create_nonce(\'action_name\'); ?>" />
表单提交通过ajax完成,并通过验证
check_ajax_referer(\'action_name\',\'nonce\'). 这总是会返回
-1. 所有REST端点都已在没有nonce的情况下进行了测试,并且工作完全正常。
这个问题似乎源于wp的用户识别
My debugging so far
<在wp包括/可插拔的范围内创建临时文件。php
wp_create_nonce(\'action_name\') 创建一个nonce散列各种变量,包括用户id和操作。
Ajax调用
我提交了一个Ajax调用check_ajax_referer(\'action_name\',\'nonce\'). 这依次调用wp_verify_nonce($nonce,$action) 它通过散列相同的变量并比较两者来验证nonce。
逆向工程来定位问题我的问题是wp_create_nonce(\'action_name\') 正在使用正确的用户id创建。但是,当我运行check_ajax_referer(\'action_name\',\'nonce\') 哪个呼叫wp_verify_nonce($nonce,$action) 依次调用wp_get_current_user(); 找不到用户(用户id为0)。
Evidence the problem is to do with user id
如果我临时编辑wp includes/pluggable。为了强制使用我的用户id,nonce验证工作正常。这就好像对已知有效端点的ajax请求被视为用户已注销,而不管用户是否已注销。
很明显,我遗漏了一些东西,但我不知道是什么。
如果有帮助,这就是REST点注册。如前所述,它工作正常,无需临时人员参与。
register_rest_route(
\'my-namespace\', //namespace
\'my-namespace-route-1\', //route
[\'methods\'=>\'POST\',
\'callback\'=>[\'Another_Class\',//class
\'a_static_function\'] //static function
] //params
);