rocketchat_API调用users_list()返回error-invalid-query报错如何解决
users_list() 接口返回 error-invalid-query 错误解决方案 问题原因
该报错是RocketChat服务端升级至6.0及以上版本后,默认开启REST API查询字段白名单校验导致的。旧版本rocketchat_API Python库调用users_list()时,默认拼接的查询参数包含emails.address字段,该字段不在新版服务端默认允许的查询字段列表中,因此即使调用时未手动传任何过滤参数,也会触发非法查询报错;服务端升级前无该校验逻辑,因此代码此前可正常运行。
可行解决方案
方案1(推荐):升级
rocketchat_API依赖到最新版本
最新版本的库已经适配新版RocketChat的接口校验规则,移除了默认参数中不被允许的查询字段,无需修改原有业务代码,直接执行升级命令即可:pip install --upgrade rocketchat_API升级完成后原代码可直接正常调用。
方案2:无法升级依赖时,手动覆盖接口默认参数
如果暂时不能升级依赖版本,调用users_list()时手动传入空的查询条件和返回字段配置,覆盖库自带的默认非法参数即可,修改后的调用示例:from pprint import pprint from rocketchat_API.rocketchat import RocketChat username = "bot" password = "password" server_url = "https://server.com/" bot = RocketChat(username, password, server_url=server_url) # 传入空query、fields参数覆盖库默认值 pprint(bot.users_list(query={}, fields={}).json())方案3:自建服务端可调整API白名单配置
如果你使用的是自建RocketChat服务端且拥有管理员权限,可进入管理后台调整REST API配置:依次打开「管理面板-设置-常规-REST API」,找到允许的查询字段配置项,在列表中追加emails.address,保存配置后重启服务即可恢复调用。该方案会扩大接口查询权限范围,存在一定安全风险,非特殊情况不推荐使用。
若后续调用时出现其他字段触发同类
error-invalid-query报错,可按照相同逻辑处理:优先升级适配版本的依赖,或手动移除查询参数中未被白名单允许的字段即可。
内容的提问来源于stack exchange,提问作者user9961985

