From 80ae730dc56e60ac3a758db209a62410c2017c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 24 Sep 2026 17:57:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=B1=82=E8=BD=AC=E5=8F=91?= =?UTF-8?q?=20API=20Key=20=E5=89=8D=E5=8E=BB=E6=8E=89=E9=A6=96=E5=B0=BE?= =?UTF-8?q?=E7=A9=BA=E7=99=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - server-rs/crates/platform-tripo/src/common/config.rs:client_options 里 api_key 先 trim 再交给 SDK,校验口径与发送口径统一,带空白的密钥不再变成 provider 侧的 401 - server-rs/crates/platform-tripo/src/common/config.rs:补用例锁住 client_options 发送的 api_key 已 trim --- server-rs/crates/platform-tripo/src/common/config.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/server-rs/crates/platform-tripo/src/common/config.rs b/server-rs/crates/platform-tripo/src/common/config.rs index 0fa12c18f..ef7cdaf79 100644 --- a/server-rs/crates/platform-tripo/src/common/config.rs +++ b/server-rs/crates/platform-tripo/src/common/config.rs @@ -98,7 +98,9 @@ impl TripoSettings { pub(crate) fn client_options(&self) -> ClientOptions { ClientOptions { - api_key: Some(self.api_key.clone()), + // 校验用的是 trim 后的值,发出去的也必须是 trim 后的值:密钥被复制时带上 + // 首尾空白,就会在 provider 那边变成一个看不懂的 401。 + api_key: Some(self.api_key.trim().to_string()), base_url: Some(self.base_url.clone()), timeout: Some(self.request_timeout), retries: Some(self.retries), @@ -182,4 +184,12 @@ mod tests { .expect("合法配置必须构造成功"); assert_eq!(settings.request_timeout, Duration::from_secs(5)); } + + #[test] + fn client_options_trim_credentials_that_validation_trimmed() { + let options = + settings(Duration::from_secs(1), " key ", "https://example.com").client_options(); + + assert_eq!(options.api_key.as_deref(), Some("key")); + } }