Tori TIC

您在 Lovable、Bolt、v0 或 Cursor 中打造了一個應用程式。它在預覽中運作完美。您部署後,開啟上線網址,現在畫面一半是空白的,或者您看到類似以下的訊息:

permission denied for table profiles
code: 42501

Enter fullscreen mode Exit fullscreen mode

或者您的資料載入為 null,且主控台顯示 getUser() 沒有回傳任何內容。最令人沮喪的是,在正常運作的預覽與發生錯誤的部署之間,您的程式碼並沒有任何改變。那麼到底發生了什麼事?

為什麼幾乎所有 AI 打造的應用程式都會發生這種情況

這是我們最常見的失敗之一,而且不是隨機發生的。AI 應用程式 builder 可以快速產生正常運作的前端,但它們經常讓您的應用程式與資料庫之間的安全邊界處於半完成狀態。通常同時存在兩種情況:

  1. 已啟用 Row Level Security (RLS)。Supabase 會啟用 RLS,讓資料表只能由正確的使用者讀取或寫入。這是正確的,也是您想要的。您的政策可能會寫成類似「當 auth.uid() = user_id 時,該資料列才可見」。

  2. 在正式環境中送達 Supabase 的請求是匿名狀態。在 builder 預覽中,請求通常會帶有您的工作階段,或以較高的權限執行,因此 RLS 會讓它通過。在實際部署中,伺服器在呼叫 Supabase 時並未附帶已登入使用者的身分。所以 auth.uid() 為 null,政策無法匹配,而 Supabase 正確地回傳 42501 permission denied

簡單來說:您的安全規則正在運作,但您的應用程式在敲門時沒有出示身分證明。

如何確認這是您的問題

在變更任何設定之前,請保留完整的錯誤訊息。然後依序檢查:

  • 發生錯誤的資料表是否已啟用 RLS?在 Supabase 中開啟該資料表,查看其政策。如果已啟用 RLS 但沒有符合您查詢的政策,則每次讀取或寫入都會失敗。
  • 伺服器上的請求是否已驗證身分?在執行查詢的伺服器路由中加入記錄,並列印是否包含使用者。如果顯示 null 或 anonymous,那就是原因。
  • 您的環境變數是否指向發生錯誤的同一個 Supabase 專案?部署指向錯誤的專案,或缺少 SUPABASE_URL 與 anon key,都會產生相同的症狀。
  • 您的驗證重新導向 URL 是否包含上線網域?在 Supabase Auth 設定中,網站 URL 與重新導向允許清單必須包含您的正式網域,而不僅是 localhost。

解決方法

真正的解決方法是讓請求帶有使用者的身分,以便在 RLS 檢查時 auth.uid() 能被填入。在 Next.js 與 Supabase 應用程式中,通常意味著:

  1. 在任何觸及受保護資料表的伺服器路由或 action 中,使用會讀取驗證 cookie 的 request-scoped server client,而非普通的匿名 client。
  2. 在 middleware 中重新整理工作階段,以便 cookie 在導航過程中及在正式網域硬重整後保持有效。
  3. 確認 RLS 政策符合您真正的存取模式。如果使用者應該只能看到自己的資料列,則政策會將 auth.uid() 與資料列的 user 欄位進行比較。請勿透過關閉 RLS 來「修正」此問題。
  4. 將正式網域加入 Supabase Auth 重新導向 URL,然後重新測試完整流程:在上線網址上登入、載入頁面,並進行硬重整。

接著重新執行先前失敗的使用者操作,並確認它能對發生錯誤的同一個 Supabase 專案與網域正常運作。

注意事項

誘人的捷徑是停用 RLS,或在瀏覽器中使用 service role key 讓錯誤消失。請不要這麼做。停用 RLS 會讓該資料表中的每一列都能被網路上任何人讀取與寫入,而將 service role key 放在 client 程式碼中,則是把資料庫的完整控制權交給陌生人。這個錯誤雖然惱人,但它正在保護您。

如果您卡住了,或您不是技術人員

如果您是非技術人員,而這段文字對您來說像另一種語言,這很正常。這正是 AI builder 無法為您完成的那一類事情,因為它存在於驗證、資料庫與部署之間的邊界。

我們提供一項名為 Vibe-Code Rescue 的服務。您貼上錯誤訊息,就能獲得免費、淺顯易懂的診斷,了解問題所在以及修復所需的步驟。如果您希望我們幫您修復,費用為固定金額,且您只需在確認修復成功後付款,並擁有您自己的乾淨程式碼。沒有訂閱,沒有 retainer。

免費診斷請至:https://rescue.ticassociation.com

A TIC Association creation.