javascript ajax and nonce

时间:2017-11-01 作者:digitalcreative.tech

在动态创建表单时,我很难使用Wordpress nonce验证通过对php后端的XML请求来实现nonce。我同意表单构建版本

wp_nonce_field( \'delete-comment_\'.$comment_id );
因此,在通过javascript本地化时,我尝试使用其他nonce选项。

$nonce = wp_create_nonce( \'my-action_\'.$post->ID ); 
然后要验证,似乎有两种选择。

check_ajax_referer( \'process-comment\' );
wp_verify_nonce( $_REQUEST[\'my_nonce\'], \'process-comment\'.$comment_id );
这两项我似乎都无法在验证中得到认可。有一个数字通过帖子传递,我也尝试过,命名,不命名,还有很多其他的选择,但似乎没有成功做一些简单的事情。抄本上给出的例子也非常令人困惑。

例:这里https://codex.wordpress.org/WordPress_Nonces

有人能解释一下这种令人沮丧的经历吗?非常感谢

2 个回复
最合适的回答,由SO网友:digitalcreative.tech 整理而成

好的,我找到了一个可行的解决方案,它和我认为的整个过程一样简单。令人困惑的Wordpress抄本让事情变得更加困难。

nonce的创建和命名非常简单:
wp_create_nonce( \'example\' );

这是通过AJAX和脚本本地化传递给PHP的。

然后在$\\u后期验证期间;只需将post名称作为验证函数中的第二个参数传递。例如:
check_ajax_referer( \'example\', \'nonce\')

nonce 是$\\u POST标识符的名称,例如:
$_POST[\'nonce\']

不知何故,通过《法典》和通过网络找到的其他例子,很难理解这一点。我希望这个解释能帮助其他正在与抄本和nonces作斗争的人。

SO网友:Tom J Nowell

根本问题是你的nonce都不匹配

您可以为以下对象创建一个nonce:\'delete-comment_\'.$comment_id

然后为以下对象创建一个nonce:\'my-action_\'.$post->ID

然后检查推荐人是否有完全不同的临时状态:\'process-comment\'

然后使用另一个唯一的nonce名称对nonce本身进行验证检查:\'process-comment\'.$comment_id

很明显,由于它们都不匹配,检查也将不匹配,并拒绝传递的nonce值。

当您生成nonce时,您给它一个操作/名称,它将根据该操作/名称生成一个令牌。然后,在处理请求时,根据操作/名称检查令牌,以验证用户确实打算执行该操作。

e、 g.为创建nonce\'delete-comment_\'.$comment_id 然后可以发送删除注释请求。然后处理程序可以检查您是否打算删除该注释。如果操作/名称不匹配,则无法执行此操作。

关于身份验证的另一个注意事项是验证意图的方法,但它们不是身份验证的方法。始终检查用户是否已登录,以及用户是否能够通过current_user_can 作用

临时消息可以告诉您用户确实单击了删除注释按钮,但它不会告诉您是否允许他们删除注释

结束

相关推荐

为什么WordPress Admin中的这个javascript搜索功能不起作用?

我已经创建了自己的自定义元框。元框包含三个下拉菜单,用作过滤器和搜索框。还有一个显示帖子列表的结果面板。用户可以选择帖子并将其添加到另一个收集帖子的面板中。这类似于ACF关系字段及其工作方式。您在左侧有帖子,单击其中一篇,它就会添加到收集区域。按post上的submit将所有值保存到meta字段中。我有过滤器工作,我也有关系片工作。出于某种原因,我实现搜索框的方式没有任何作用。我在一个HTML文件中对此进行了测试,结果很好。我可以在搜索框中键入,它将扫描无序列表数据文本属性中的项目,找到结果并过滤列表。当