Php WordPress Nonce未验证

Php WordPress Nonce未验证,php,wordpress,nonce,Php,Wordpress,Nonce,我有一个两步的过程,用客户端应用程序登录用户到WordPress站点 第一步:客户端应用程序调用WordPress站点的API url,它创建一个nonce并将nonce令牌返回给应用程序 $nonce = wp_create_nonce("my-action"); 第二步:客户端应用程序使用带有GET请求的Web视图加载WordPress站点,GET请求包括GET参数中的nonce。然后验证nonce wp_verify_nonce( $_GET['token'], 'my-action'

我有一个两步的过程,用客户端应用程序登录用户到WordPress站点

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

$nonce = wp_create_nonce("my-action");
第二步:客户端应用程序使用带有GET请求的Web视图加载WordPress站点,GET请求包括GET参数中的nonce。然后验证nonce

 wp_verify_nonce( $_GET['token'], 'my-action' );
我用邮递员和桌面浏览器模拟了这个过程。但暂时无法验证。它总是失败

这就是我创建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

}

知道怎么回事吗?

我的live server wp站点上的
wp\u verify\u nonce()
从未返回true。同时,我的后台服务器上的站点副本(相同的代码)一直在验证这一点

问题是同一个页面,包含nonce的表单从同一个实时站点URL中(在不同的Chrome窗口中)打开了两次。第二份页面的打开时间比第一份晚很多(比如15分钟后)。我忘记了第一个被打开的页面(它生成了与较早时间相关的不同nonce),试图验证较年轻的页面表单nonce,但没有成功

原因是
wp\u verify\u nonce()
以某种方式将较新的页面nonce与较旧的页面nonce进行了比较

例如,
wp\u create\u nonce()
,我在后端重复测试这个问题,给了我两个不相同的nonce。我通过AJAX发送的隐藏表单字段中的一个,以及我的服务器AJAX处理程序中
wp\u verify\u nonce()
检查行旁边的另一个。在禁用缓存的情况下,多个
Ctrl-F5
+打开的Chrome开发工具网络没有任何效果。当时的情况不同


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

我的live server wp站点上的
wp\u verify\u nonce()
从未返回true。同时,我的后台服务器上的站点副本(相同的代码)一直在验证这一点

问题是同一个页面,包含nonce的表单从同一个实时站点URL中(在不同的Chrome窗口中)打开了两次。第二份页面的打开时间比第一份晚很多(比如15分钟后)。我忘记了第一个被打开的页面(它生成了与较早时间相关的不同nonce),试图验证较年轻的页面表单nonce,但没有成功

原因是
wp\u verify\u nonce()
以某种方式将较新的页面nonce与较旧的页面nonce进行了比较

例如,
wp\u create\u nonce()
,我在后端重复测试这个问题,给了我两个不相同的nonce。我通过AJAX发送的隐藏表单字段中的一个,以及我的服务器AJAX处理程序中
wp\u verify\u nonce()
检查行旁边的另一个。在禁用缓存的情况下,多个
Ctrl-F5
+打开的Chrome开发工具网络没有任何效果。当时的情况不同


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

将代码张贴在实际呈现nonce的位置(字段和)。您在哪里打印nonce?你的输入表格在哪里?没有输入表格。我使用GET变量像这样传递它<代码>http://apidemo/?token=03b7c4cab0&username=333好吧,我们可以把这一点放在您的问题中,以及您是如何构造查询字符串的。但是,如果您正在传递
nonce
,为什么要验证
令牌
??是的,我提到过我在GET参数中放入nonce。实际上,令牌是“nonce”。为了方便起见,我刚刚将其重命名。将代码张贴在实际呈现nonce的位置(字段和)。在哪里打印nonce?你的输入表格在哪里?没有输入表格。我使用GET变量像这样传递它<代码>http://apidemo/?token=03b7c4cab0&username=333好吧,我们可以把这一点放在您的问题中,以及您是如何构造查询字符串的。但是,如果您正在传递
nonce
,为什么要验证
令牌
??是的,我提到过我在GET参数中放入nonce。实际上,令牌是“nonce”。为了方便你,我刚刚重新命名了它。