Gatsby查询站点邮箱遇权限错误,WPGraphQL v1.9.0环境求解决
解决WPGraphQL v1.9.0查询站点邮箱的权限错误
针对你遇到的未认证状态下查询站点邮箱返回权限错误的问题,以下是几种可行的解决办法:
方法1:修改默认站点邮箱字段的权限规则
在WordPress主题的functions.php文件或自定义插件中添加代码,直接放宽站点邮箱字段的访问权限:
add_filter('graphql_general_settings_fields', function($fields) { if (isset($fields['email'])) { // 替换默认权限检查,允许所有访问 $fields['email']['permission'] = function() { return true; }; } return $fields; });
这段代码会修改generalSettings下email字段的权限逻辑,跳过认证检查,让未授权用户也能获取该值。
方法2:新增自定义公开邮箱字段
如果不想修改默认字段的权限逻辑,可以新增一个独立的公开字段用于查询站点邮箱:
add_action('graphql_register_types', function() { register_graphql_field('RootQuery', 'publicSiteEmail', [ 'type' => 'String', 'description' => '无需认证即可访问的站点邮箱', 'resolve' => function() { return get_option('admin_email'); }, 'permission' => function() { return true; } ]); });
添加后,你可以在GraphiQL或Gatsby的查询中使用{ publicSiteEmail }来获取邮箱地址。
方法3:临时提升Gatsby数据源的访问权限
如果你的WordPress仅作为本地数据源使用,也可以给Gatsby使用的访问用户添加manage_options权限:
- 进入WordPress后台创建一个新用户,角色设置为管理员
- 在
gatsby-config.js的gatsby-source-wordpress配置中添加该用户的认证信息:
module.exports = { plugins: [ { resolve: `gatsby-source-wordpress`, options: { url: `http://your-local-wp/graphql`, auth: { htaccess: { username: 'your-admin-user', password: 'your-admin-pass', }, }, }, }, ], }
这种方式适合不想修改代码的场景,且因为你的WP是本地非公开实例,不会有安全风险。
内容的提问来源于stack exchange,提问作者Sez
相关产品推荐
相关产品推荐

