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。
留言
張貼留言