我有一个与 RLS 相关的 Supabase 问题。
在我的Python后端中,我设置了supabase客户端并根据前端传递的JWT
jwt
获取用户:
user = supabase.auth.get_user(jwt)
user_id = user.dict().get("user").get("id")
response = (
supabase
.table("users")
.update({"credits": 10})
.eq("user_id", user_id)
.execute()
)
如果没有 RLS,这可以正常工作,成功更新行。
但是,使用以下 RLS 规则,不会修改任何内容并返回 0 行:
create policy "Everybody can select users."
on users for select
using ( true );
create policy "Users can update own user."
on users for update
using ( auth.uid() = user_id );
我做错了什么?显然我必须使用 some RLS 规则…但我猜使用 JWT 时身份验证检查
( auth.uid() = user_id )
不匹配。
我认为我还需要将 JWT 传递给
supabase
客户端,因此它包含在所有请求中,但我不知道如何!
救命!?
好的,解决了:
# TODO: Update this with the data of a currently logged in user
access_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..."
refresh_token = "xxxxxxxxxxxxxxxxxxxxxx"
supabase: Client = create_client(
os.environ.get("NEXT_PUBLIC_SUPABASE_URL"),
os.environ.get("NEXT_PUBLIC_SUPABASE_ANON_KEY"),
)
supabase.auth.set_session(access_token=access_token, refresh_token=refresh_token)
现在请求与 RLS 合作! :)