Ably 遇到的坑 PaaS(平台即服務),經驗筆記


問題 1:Channel denied access based on given capability

現象:Ably 訂閱被拒絕,401 錯誤。

根本原因:Channel 命名格式錯誤。

❌ 錯誤:env-{env_id}   → capability: env-*

✅ 正確:env:{env_id}   → capability: env:*

Ably 的 wildcard capability 只支援冒號分隔,env-* 是非法格式,Ably 伺服器無法匹配,每個訂閱都被拒絕。


解法:把所有 channel 命名和 capability 從 - 改成 :。


問題 2:PHP SDK v1 createTokenRequest + JS SDK v2 不相容

現象:Token 格式問題,authCallback 各種嘗試都失敗。


根本原因:JS SDK v2 移除了 callback-based API,authCallback(tokenParams, callback) 的 callback 方式在 v2 已不支援,必須用 Promise 或 authUrl。


解法:改用 authUrl 方式讓 Ably SDK 自己打後端取 Token,繞過 callback 格式問題。


問題 3:authUrl 打後端時沒有帶 X-UI-Key header

現象:authUrl 設定了 authHeaders,但 Ably SDK 不保證每次都帶,導致後端 401。


解法:把 /api/ably-token 從 UI_KEY 驗證中移除,TokenRequest 本身有 HMAC 簽名保護,就算公開也只能 subscribe,不能 publish。


問題 4:requestToken vs createTokenRequest

現象:試用 PHP requestToken 產生 TokenDetails,Ably REST 回 201 但 JS SDK 還是連不上。


根本原因:PHP SDK v1.1 的 requestToken 產生的 TokenDetails 格式,JS SDK v2 無法直接使用。


解法:改回 createTokenRequest(產生 TokenRequest),讓 Ably SDK 自己去換 Token。

留言