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
相关产品推荐
相关产品推荐

