认证

邮件模板

了解如何在 Supabase 中管理邮件模板。


您可以自定义用于身份验证流程的电子邮件消息。您可以编辑以下电子邮件模板:

  • 确认注册
  • 邀请用户
  • 魔法链接
  • 更改电子邮件地址
  • 重置密码

术语说明

模板系统提供以下变量供使用:

名称描述
{{ .ConfirmationURL }}包含确认URL。例如,注册确认URL可能形如:https://project-ref.supabase.co/auth/v1/verify?token={{ .TokenHash }}&type=email&redirect_to=https://example.com/path
{{ .Token }}包含6位一次性密码(OTP),可替代{{. ConfirmationURL }}使用。
{{ .TokenHash }}包含{{ .Token }}的哈希值。可用于在邮件模板中构建自定义链接。
{{ .SiteURL }}包含应用程序的站点URL。可在项目的认证设置中配置。
{{ .RedirectTo }}包含调用signUpsignInWithOtpsignInWithOAuthresetPasswordForEmailinviteUserByEmail时传递的重定向URL。重定向URL白名单可在项目的认证设置中配置。
{{ .Data }}包含来自auth.users.user_metadata的元数据。可用于个性化邮件内容。

编辑邮件模板

在托管的 Supabase 项目中,您可以通过邮件模板页面编辑邮件模板。对于自托管项目或本地开发环境,请编辑您的配置文件

移动端深度链接

对于移动应用程序,您可能需要链接或重定向到应用内的特定页面。请参阅移动端深度链接指南进行设置。

限制

邮件预取

某些邮件提供商可能具有垃圾邮件检测或其他安全功能,会预取来自邮件的URL链接(例如Microsoft Defender for Office 365中的安全链接)。在这种情况下,发送的{{ .ConfirmationURL }}会被立即消耗,导致"Token has expired or is invalid"错误。为防止这种情况:

  • 改用邮件OTP验证,在邮件模板中包含{{ .Token }}

  • 创建自定义邮件链接,将用户重定向到一个页面,在该页面点击按钮确认操作。例如,您可以在邮件模板中包含以下内容:

    1
    2
    3
    <a href="{{ .SiteURL }}/confirm-signup?confirmation_url={{ .ConfirmationURL }}" >确认您的注册</a>

    用户应被引导至您网站上的一个页面,通过点击按钮确认操作。该按钮应包含实际的确认链接,可通过解析URL中的confirmation_url={{ .ConfirmationURL }}查询参数获取。

邮件追踪

如果您使用的外部邮件提供商启用了"邮件追踪"功能,Supabase邮件模板中的链接将被覆盖且无法正常工作。我们建议禁用邮件追踪功能,以确保邮件链接不被覆盖。

将用户重定向至服务器端端点

如果您计划使用服务器端渲染,可能希望邮件链接将用户重定向至服务器端端点,在返回页面之前检查用户是否已认证。然而,默认的邮件链接会在验证后将用户重定向至带有会话信息的URL查询片段中。由于会话信息默认通过查询片段返回,您将无法在服务器端访问这些信息。

您可以通过自定义邮件模板中的链接来成功将用户重定向至服务器端端点。例如:

1
2
3
4
<a href="https://api.example.com/v1/authenticate?token_hash={{ .TokenHash }}&type=invite&redirect_to={{ .RedirectTo }}" >接受邀请</a>

当用户点击链接时,请求将访问https://api.example.com/v1/authenticate,您可以从URL中获取token_hashtyperedirect_to查询参数。然后,您可以调用verifyOtp方法来获取认证会话,再将用户重定向回客户端。由于verifyOtp方法会向Supabase Auth发起POST请求来验证用户,会话信息将通过响应体返回,服务器可以读取这些信息。例如:

1
2
3
4
5
6
7
8
const { , } = .(new (..))const { : { }, ,} = await ..({ , : as })// 随后使用redirect_to参数将用户重定向回客户端// ...

自定义配置

Supabase Auth 使用了 Go 模板。这意味着可以根据模板属性条件式地渲染信息。

向早期访问用户发送不同邮件

向通过早期访问域名 (https://www.earlyaccess.trial.com) 注册的用户发送不同的邮件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{{ if eq .Data.Domain "https://www.example.com" }}<h1>欢迎使用我们的数据库服务!</h1> <p>尊敬的开发者:</p> <p>欢迎使用 Billy,可扩展的开发平台!</p> <p>此致,<br>Billy 团队</p>{{ else if eq .Data.Domain "https://www.earlyaccess.trial.com" }}<h1>欢迎使用我们的数据库服务!</h1> <p>尊敬的开发者:</p> <p>欢迎使用 Billy,可扩展的开发平台!</p> <p>作为早期访问成员,您可以使用精选功能如点对空间恢复。</p> <p>此致,<br>Billy 团队</p>{{ end }}