【问题标题】:WordPress Nonce not verifyingWordPress Nonce 未验证
【发布时间】:2017-06-03 20:06:45
【问题描述】:

当用户使用客户端应用程序登录 WordPress 网站时,我有一个两步流程

第一步:客户端应用程序调用WordPress站点的API url,它创建一个nonce并将nonce令牌返回给应用程序。

$nonce = wp_create_nonce("my-action");

第二步:客户端应用程序使用带有 GET 请求的 Web 视图加载 WordPress 站点,其中包括 GET 参数中的 nonce。然后验证随机数。

 wp_verify_nonce( $_GET['token'], 'my-action' );

我使用 Postman 和桌面浏览器对此进行了模拟。但是nonce无法验证。它总是失败。

这是我创建随机数的地方

if(username_exists($username)){
            $user = get_user_by('login', $username );

            $result['status'] = "already_registered";

            $token = sha1(date('H:i'));
            $result['token'] = $token;

            $result['nonce'] = wp_create_nonce("my-action");

            return $result;

        }

这是我检查随机数的地方...

function userAuth(){

    echo $_GET['token'];

    $nonce = wp_verify_nonce( $_GET['token'], 'my-action' );

    //Do more things based on above verification

}

知道有什么问题吗?

【问题讨论】:

  • 将代码发布到您实际呈现随机数的位置( 字段和
    )。
  • 你在哪里打印你的随机数?您的输入表单在哪里?
  • 无输入表单。我使用 GET 变量像这样传递它...http://apidemo/?token=03b7c4cab0&username=333
  • 好吧,可以把它放在你的问题中,以及你是如何构建查询字符串的。但是,如果你通过nonce,你为什么要验证token???
  • 是的,我确实提到我将 nonce 放入 GET 参数中。实际上,token 是“nonce”。为了方便起见,我只是将其重命名。

标签: php wordpress nonce


【解决方案1】:

当我的实时服务器 WP 站点上的 wp_verify_nonce() 从未返回 true 时,我遇到了这种情况。同时,我的舞台服务器上的站点副本(相同的代码)始终验证了这一点。

问题是包含 nonce 的表单从同一实时站点 URL打开两次(在不同的 Chrome 窗口中)的同一页面。该页面的第二个副本比第一个副本打开的时间要晚得多(比如 15 分钟后)。而且我忘记了第一个被打开的页面(它生成了与早期时间相关的不同的随机数),试图让更年轻的页面表单随机数验证没有成功。

原因是wp_verify_nonce() 以某种方式将较年轻的页面随机数与较旧的随机数进行了比较。

wp_create_nonce(),我在后端重复测试了这个问题,给了我两个不相同的随机数。我通过 AJAX 发送的隐藏表单字段中的一个和我的服务器 AJAX 处理程序中 wp_verify_nonce() 检查行旁边的另一个。多个Ctrl-F5 + 打开了禁用缓存的 Chrome 开发工具网络无效。随机数不同。

当我关闭旧页面并清除新页面的缓存后,nonce 验证为真。

【讨论】:

    猜你喜欢
    • 2017-07-08
    • 2014-09-19
    • 2017-12-28
    • 2011-06-30
    • 2018-03-15
    • 2015-07-01
    • 2017-12-25
    • 2021-01-05
    • 2017-10-11
    相关资源
    最近更新 更多