You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Supabase C# 启用RLS后插入数据触发权限违规问题求助

Supabase C#客户端插入数据触发RLS权限违规问题解决

问题背景

启用RLS(策略配置为仅允许已认证用户执行插入操作)后,C#客户端向cities表插入数据时触发权限违规;关闭RLS则插入正常。认证功能可正常完成,但插入请求未携带会话令牌(推测),且JS/TS版本无此问题。

排查与解决方案

1. 确认会话是否正确绑定

SignIn完成后,检查supabase.Auth.CurrentSession是否不为null,这是客户端自动携带令牌的前提。如果会话为空,说明认证流程存在异常,需排查SignIn调用是否正确处理返回结果。

2. 显式添加认证请求头

若客户端自动绑定会话令牌失效,可在Insert请求中手动添加Authorization头,使用会话的AccessToken:

var response = await supabase.From<City>()
    .WithHeader("Authorization", $"Bearer {session.AccessToken}")
    .Insert(model);

3. 检查客户端配置

确保SupabaseOptions中开启自动刷新令牌(默认已开启,显式设置更稳妥):

var options = new SupabaseOptions
{
    AutoConnectRealtime = true,
    AutoRefreshToken = true
};

4. 升级客户端版本

旧版本的Supabase C#客户端可能存在会话绑定的bug,尝试升级到最新稳定版,确保与Supabase服务端的兼容性。

修正后的代码示例

[Table("cities")]
class City : BaseModel
{
    [PrimaryKey("id", false)]
    public int Id { get; set; }

    [Column("name")]
    public string Name { get; set; }

    [Column("country_id")]
    public int CountryId { get; set; }
}

// ... 输入邮箱密码的逻辑 ...

try
{
    var url = "projectlink";
    var key = "mykey";

    var options = new SupabaseOptions
    {
        AutoConnectRealtime = true,
        AutoRefreshToken = true
    };

    var supabase = new Supabase.Client(url, key, options);
    await supabase.InitializeAsync();

    var session = await supabase.Auth.SignIn(email, password);

    if (session != null)
    {
        Console.WriteLine("Signed in!");
        
        // 验证当前会话有效性
        if (supabase.Auth.CurrentSession == null)
        {
            Console.WriteLine("Error: Session not found after sign-in");
            return;
        }

        var model = new City
        {
            Name = "The Shire",
            CountryId = 554
        };

        // 手动添加认证头确保请求携带令牌
        await supabase.From<City>()
            .WithHeader("Authorization", $"Bearer {session.AccessToken}")
            .Insert(model);
        
        Console.WriteLine("Data inserted successfully!");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Insert failed: {ex.Message}");
}

内容的提问来源于stack exchange,提问作者Illia_Shmelov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:10:28