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

如何在Supabase中使用未纳入官方支持列表的自定义授权提供商

为Supabase接入未官方支持的第三方授权服务

1. 先确认第三方服务的授权协议

首先得搞清楚你用的第三方服务支持什么授权方式——是OAuth 2.0、OpenID Connect,还是自定义token/API密钥?优先选OAuth 2.0,这和Supabase的适配性最好。

2. 搭建前端授权跳转流程

  • 引导用户跳转到第三方服务的授权页面,记得提前在第三方服务后台把回调地址配置成你的应用域名 + /auth/v1/callback,并在跳转时带上这个地址。
  • 用户完成授权后,第三方会返回一个授权码,前端拿到这个码后,建议调用自己的后端接口去交换token(前端直接处理也可行,但后端处理更安全)。

3. 后端处理token交换与用户同步

  • 用授权码请求第三方的token接口,获取access_token、用户基本信息(比如邮箱、用户名),如果是OIDC协议还会拿到id_token。
  • 按照第三方服务的文档验证返回的token有效性,避免使用伪造或过期的token。
  • 同步用户到Supabase:
    • 先查询auth.users表,通过第三方用户ID(可以存在raw_user_meta_data里作为唯一标识)判断是否已有该用户。
    • 若不存在,调用auth.admin.create_user()函数创建用户,把第三方的用户信息存入raw_user_meta_data;若已存在,更新用户的最新信息。

4. 生成Supabase自定义JWT返回给前端

  • 用你Supabase项目的JWT_SECRET(在项目API设置页面获取)生成符合Supabase格式的JWT,payload中必须包含sub(用户的Supabase UUID),同时带上邮箱等必要字段。
  • 把生成的JWT返回给前端,前端调用supabase.auth.setSession()设置用户会话,之后就能正常使用Supabase的数据库、存储等功能了。

5. 可选:用PostgreSQL触发器同步业务数据

如果需要在用户创建/更新时自动同步到你的业务表,可以创建如下触发器:

CREATE OR REPLACE FUNCTION public.handle_new_user()
RETURNS TRIGGER AS $$
BEGIN
  INSERT INTO public.profiles (id, email, username)
  VALUES (NEW.id, NEW.email, NEW.raw_user_meta_data->>'username');
  RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;

CREATE TRIGGER on_auth_user_created
AFTER INSERT ON auth.users
FOR EACH ROW EXECUTE FUNCTION public.handle_new_user();

6. 处理登出逻辑

前端调用supabase.auth.signOut()的同时,记得调用第三方服务的登出接口(如果支持的话),清除用户在第三方的授权会话。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:50:25