来自 Python 客户端的带有 JWT 身份验证的 Supabase 不适用于 RLS

问题描述 投票:0回答:1

我有一个与 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
客户端,因此它包含在所有请求中,但我不知道如何!

救命!?

python next.js jwt supabase supabase-py
1个回答
0
投票

好的,解决了:

# 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 合作! :)

© www.soinside.com 2019 - 2024. All rights reserved.