如何解决Disqus无法发布带author_name的评论?遇权限报错
核心问题分析
你遇到的两个问题本质是Disqus API的权限和参数逻辑导致的:
- 用公钥提交时报错,是因为公钥仅支持只读操作,写入评论需要应用私钥或正确的授权方式;
- 用个人
accessToken提交时author_name不生效,是因为accessToken代表已登录用户,Disqus会强制使用账号本身的信息,忽略访客作者参数。
正确解决步骤
1. 配置论坛与应用权限
- 开启访客评论:在Disqus论坛后台的「设置-评论-访客评论」中,勾选允许访客评论,并开启「允许输入姓名和邮箱」选项;
- 绑定应用与论坛:在Disqus开发者后台,确保你的应用已关联目标论坛,且拥有
write权限; - 添加信任域名:在论坛后台「设置-高级-信任域名」中,添加你的静态网站域名,避免referrer校验失败。
2. 使用应用私钥提交访客评论
要提交带指定author_name的第三方评论,必须使用应用私钥(而非公钥)调用posts/create端点,参数如下:
api_key:你的Disqus应用私钥(在开发者后台获取);forum:论坛的shortname(不是显示名称,可在论坛后台设置中找到);thread:目标线程的identifier或线程ID;message:评论内容;author_name:需要指定的访客作者名;author_email:访客邮箱(仅需格式合法,无需验证真实存在);referrer:你的静态网站域名(需在信任域名列表内)。
3. C# 请求示例
using System.Net.Http; using System.Collections.Generic; using System.Threading.Tasks; public async Task SubmitDisqusComment() { using (HttpClient client = new HttpClient()) { var postData = new Dictionary<string, string> { { "api_key", "你的应用私钥" }, { "forum", "你的论坛shortname" }, { "thread", "线程的identifier" }, { "message", "评论内容文本" }, { "author_name", "第三方评论作者名" }, { "author_email", "author@example.com" }, { "referrer", "https://你的静态网站域名.com" } }; var content = new FormUrlEncodedContent(postData); var response = await client.PostAsync("https://disqus.com/api/3.0/posts/create.json", content); var responseContent = await response.Content.ReadAsStringAsync(); // 处理响应结果,比如解析JSON判断是否成功 } }
4. 额外排查点
- 先确认线程存在:如果目标线程还未在Disqus中创建,需先调用
threads/create端点(同样用私钥)创建线程,再提交评论; - 避免跨域问题:必须在服务器端发起请求,不要在前端浏览器直接调用(会暴露私钥,且容易触发跨域限制)。
内容的提问来源于stack exchange,提问作者Dennis van der Stelt
相关产品推荐
相关产品推荐

