You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress插件开发:Token无法存入数据库及读取异常问题

解决WordPress插件中Token无法存入并读取的问题

以下是针对你遇到的Token存储/读取异常的排查和解决方案:

1. 先确认API返回的Token结构是否正确

你的代码假设Token在$response_body['data']['token'],但API返回的结构可能和预期不符。登录后查看var_dump($response_body)的输出,确认:

  • 是否存在data键
  • data下是否有token键且值不为空

如果结构不对,比如直接是$response_body['token'],那修改对应的取值路径即可。

2. 添加WordPress表单Nonce验证(关键)

WordPress默认会拦截没有CSRF验证的POST请求,这很可能是你提交表单后Token没保存的原因:

修改表单代码,添加Nonce字段

在表单内(比如提交按钮上方)加入:

<?php wp_nonce_field( 'the_stuff_go_login_action', 'the_stuff_go_login_nonce' ); ?>

修改POST处理逻辑,验证Nonce

把原有的if ( isset( $_POST['the_stuff_go_login_submit'] ) )替换为:

if ( 
    isset( $_POST['the_stuff_go_login_submit'] ) 
    && wp_verify_nonce( $_POST['the_stuff_go_login_nonce'], 'the_stuff_go_login_action' )
) {
    // 原有的登录请求、Token保存代码
}

3. 调试Token保存和读取的即时状态

在保存Token后立即验证是否存入

在update_option之后添加调试代码,确认保存是否成功:

if ( isset( $response_body['data']['token'] ) ) {
    $token = $response_body['data']['token'];
    $save_success = update_option( 'the_stuff_go_token', $token );
    $saved_token = get_option('the_stuff_go_token');
    
    echo '<p>Login successful. Token saved.</p>';
    echo '<p>Raw Token: ' . $token . '</p>';
    echo '<p>Token from DB: ' . $saved_token . '</p>';
    echo '<p>Save Status: ' . ($save_success ? 'Success' : 'Failed/No Change') . '</p>';
    return;
}

如果这里能读到$saved_token,说明保存没问题,问题出在读取的环节;如果读不到,说明保存过程有问题。

在读取函数中调试Token值

修改the_stuff_go_render_page函数,先输出Token值:

function the_stuff_go_render_page() {
    $token = get_option('the_stuff_go_token');
    echo '<p>Stored Token: ' . $token . '</p>'; // 先看这个输出
    
    require_once('vendor/autoload.php');
    $client = new \GuzzleHttp\Client();
    
    // 调试授权头
    $auth_header = 'Bearer ' . $token;
    echo '<p>Authorization Header: ' . $auth_header . '</p>';
    
    $response = $client->request('GET', 'https://api.print.com/products', [
        'headers' => [
            'accept' => 'application/json',
            'authorization' => $auth_header,
        ],
    ]);
    
    echo $response->getBody();
}

如果Stored Token为空,说明确实没存入;如果有值但API调用失败,检查授权头的格式是否正确(比如Bearer后面的空格是否存在)。

4. 直接检查数据库确认选项是否存在

登录你的MySQL数据库,查看wp_options表(表前缀可能不是wp_,根据你的配置调整),搜索option_name为the_stuff_go_token的记录:

  • 如果存在,确认option_value是否为你的Token值
  • 如果不存在,说明update_option根本没执行或者执行失败

5. 排查权限或环境问题

  • 确保你的WordPress安装有数据库写入权限
  • 如果是多站点环境,确认当前操作的站点和读取Token的站点是同一个(update_option会存在当前站点的选项表中)
  • 暂时禁用安全类插件(比如Wordfence),看是否是插件拦截了POST请求或数据库写入

内容的提问来源于stack exchange,提问作者Nani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:57:05