Supabase 实时功能:广播和在线状态授权

Supabase 实时功能:广播和在线状态授权

💡 原文英文,约1400词,阅读约需6分钟。
📝

内容提要

Supabase发布了实时广播和在线状态的授权功能,允许用户实时发送和接收消息。此版本引入了使用行级安全策略的授权功能,用户可以创建策略来控制对广播和在线状态频道的访问。文章还介绍了如何在频道上启用授权,并提供了高级示例。实时授权通过在实时消息表上运行查询并确定用户的策略来实现,该方法性能良好且延迟低。还提到了Postgres Changes支持。Supabase正在寻求反馈以改进实时授权。

🔎

延伸解读

授权机制与性能权衡

实时授权通过在频道订阅时对 realtime.messages 表执行 SELECT 和 INSERT 查询(并回滚)来检查 RLS 策略,这会导致初始连接有轻微延迟。但策略结果会缓存在服务器内存中,与用户连接关联,直到 JWT 过期或刷新令牌,因此后续消息传输延迟极低。这种设计在安全性和性能之间取得了平衡,适合对延迟敏感的应用。

策略刷新与令牌管理

Realtime 会在用户连接或收到新刷新令牌时重新检查 RLS 策略,确保即使用户声明发生变化,授权状态也能及时更新。开发者需要注意 JWT 的过期时间,以便策略定期刷新。如果令牌过期时间过长,可能导致策略更新不及时,带来安全风险;过短则增加检查频率,可能影响性能。

与 Postgres Changes 的差异

当前授权方法仅适用于 Broadcast 和 Presence,Postgres Changes 仍遵循其原有的 RLS 策略机制。这意味着开发者需要分别管理两种授权方式:对于广播和在线状态,需在 realtime.messages 表上创建策略并启用私有频道;对于数据库变更,则继续在目标表上使用 RLS。这种区分有助于理解不同实时功能的授权边界。

公共测试阶段与反馈

Broadcast 和 Presence 授权功能目前处于公共测试阶段,Supabase 欢迎用户通过 GitHub 讨论提供反馈。这意味着功能可能还不稳定,API 或有调整。开发者在生产环境使用前应评估风险,并积极反馈使用体验,以帮助改进实时授权的开发者体验和功能完整性。

❓

Q&A

Supabase的实时广播和在线状态授权功能有什么新特性?

Supabase的实时广播和在线状态授权功能允许用户实时发送和接收消息,并引入了行级安全策略来控制对频道的访问。

如何在Supabase中启用实时频道的授权?

要启用授权,需要在频道配置中添加私有参数,以检查用户的访问权限,并创建相应的RLS策略。

Supabase的实时授权是如何确保安全性的?

实时授权通过在实时消息表上运行查询并确定用户的RLS策略来实现,确保只有授权用户才能访问频道。

连接未授权用户时会发生什么?

连接未授权用户时,会收到权限不足的错误信息,无法订阅频道。

Supabase的实时授权功能目前处于什么阶段?

实时广播和在线状态授权功能目前处于公共测试阶段,Supabase欢迎用户反馈以改进该功能。

如何创建RLS策略以控制消息的接收和发送?

可以通过编写RLS策略来允许或拒绝用户接收和发送消息,例如创建允许认证用户接收和发送消息的策略。

🏷️

标签

➡️

继续阅读