认证(Authentication)

RDS Supabase的认证模块(Authentication)提供了一个功能全面的用户管理系统,支持多种认证方式,并可作为独立模块集成至您的应用程序中。

基本操作

创建新用户

  1. 邮箱注册。

    要启用邮箱注册功能,您首先需要在阿里云控制台的Supabase Auth配置中设置您的邮件服务器(SMTP)信息。这需要配置以下参数:

    GOTRUE_SMTP_PORT                 # SMTP端口:发送邮件使用的SMTP服务器端口号(如587、465)
    GOTRUE_EXTERNAL_EMAIL_ENABLED    # 启用外部邮箱登录:是否允许用户使用电子邮件进行注册和登录
    GOTRUE_SMTP_SENDER_NAME          # 邮件发件人姓名:显示在邮件中的发件人名称(例如:"Supabase 支持团队")
    GOTRUE_SMTP_USER                 # SMTP用户名:用于登录SMTP服务器的用户名(通常是邮箱地址)
    GOTRUE_SMTP_PASS                 # SMTP密码:用于登录SMTP服务器的密码或应用专用密码
    GOTRUE_SMTP_ADMIN_EMAIL          # 管理员邮箱:系统邮件的管理员收件邮箱或发件邮箱地址
    GOTRUE_SMTP_HOST                 # SMTP主机:SMTP服务器地址(如smtp.gmail.com 或 smtp.mailgun.org)
    GOTRUE_MAILER_AUTOCONFIRM        # 邮箱自动确认:是否跳过邮箱验证,自动确认用户(开发环境常用)
    GOTRUE_SITE_URL                  # 网站前端地址:用户操作后重定向的目标前端页面URL(如密码重置后跳转)
    API_EXTERNAL_URL                 # API外部访问地址:外部可访问的API地址(如 https://api.xxx.com),用于回调或通知

    配置完成后,通过以下方法调用:

    const { data, error } = await supabase.auth.signUp({
      email: 'example@email.com',
      password: 'example-password',
    })
  2. 手机号注册。

    要启用短信(SMS)注册,您需要配置一个SMS发送服务的Webhook。Supabase将调用此Hook来发送验证短信。请在阿里云控制台配置以下参数:

    GOTRUE_HOOK_SEND_SMS_ENABLED     # 是否开启SMS短信发送功能
    GOTRUE_HOOK_SEND_SMS_URI         # 需要提供一个发送确认短信的https服务地址
    GOTRUE_HOOK_SEND_SMS_SECRETS     # 是一个hook的密钥,有格式要求,以v1,whsec_开头的base64编码

    配置完成后,通过以下方法调用:

    const { data, error } = await supabase.auth.signUp({
      phone: '1381111****',
      password: 'example-password',
      options: {
        channel: 'sms'
      }
    })
  3. 支付宝认证。

    要启用支付宝登录,您需要在阿里云控制台的Supabase Auth配置中设置以下参数:

    GOTRUE_EXTERNAL_ALIPAY_ENABLED      # 是否启用支付宝登录
    GOTRUE_EXTERNAL_ALIPAY_CLIENT_ID    # 支付宝应用的 AppID
    GOTRUE_EXTERNAL_ALIPAY_SECRET       # 支付宝应用的 AppSecret
    GOTRUE_EXTERNAL_ALIPAY_REDIRECT_URI # 授权回调地址;格式:http(s)://your-supabase-url/auth/v1/callback

    配置完成后,通过以下方法调用:

    const { data, error } = await supabase.auth.signInWithOAuth({
      provider: 'alipay',
    })
  4. 微信认证。

    要启用微信登录,您需要在阿里云控制台的Supabase Auth配置中设置以下参数:

    GOTRUE_EXTERNAL_WECHAT_ENABLED      # 是否启用微信登录
    GOTRUE_EXTERNAL_WECHAT_CLIENT_ID    # 微信应用的 AppID
    GOTRUE_EXTERNAL_WECHAT_SECRET       # 微信应用的 AppSecret
    GOTRUE_EXTERNAL_WECHAT_REDIRECT_URI # 授权回调地址;格式:http(s)://your-supabase-url/auth/v1/callback

    配置完成后,通过以下方法调用:

    const { data, error } = await supabase.auth.signInWithOAuth({
      provider: 'wechat',
    })
  5. 谷歌认证。

    要启用谷歌登录,您需要在阿里云控制台的Supabase Auth配置中设置以下参数:

    GOTRUE_EXTERNAL_GOOGLE_ENABLED      # 是否启用谷歌登录
    GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID    # 谷歌OAuth 客户端 ID
    GOTRUE_EXTERNAL_GOOGLE_SECRET       # 谷歌OAuth 客户端密钥
    GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI # 授权回调地址;格式:http(s)://your-supabase-url/auth/v1/callback

    配置完成后,通过以下方法调用:

    const { data, error } = await supabase.auth.signInWithOAuth({
      provider: 'google',
    })
  6. GitHub认证。

    要启用GitHub登录,您需要在阿里云控制台的Supabase Auth配置中设置以下参数:

    GOTRUE_EXTERNAL_GITHUB_ENABLED      # 是否启用GITHUB登录
    GOTRUE_EXTERNAL_GITHUB_CLIENT_ID    # GitHub OAuth App 的 Client ID
    GOTRUE_EXTERNAL_GITHUB_SECRET       # GitHub OAuth App 的 Client Secret
    GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI # 授权回调地址;格式:http(s)://your-supabase-url/auth/v1/callback

    配置完成后,通过以下方法调用:

    const { data, error } = await supabase.auth.signInWithOAuth({
      provider: 'github',
    })

登录用户

使用邮箱和密码,或手机号和密码,或支付宝认证第三方认证来登录用户。

// 邮箱登录
const { data, error } = await supabase.auth.signInWithPassword({
  email: 'example@email.com',
  password: 'example-password',
})

// 手机号登录
const { data, error } = await supabase.auth.signInWithPassword({
  phone: '+1381111****',
  password: 'some-password',
})

// OAuth 第三方登录
const { data, error } = await supabase.auth.signInWithOAuth({
  provider: 'provider_name'
})
// provider 可选值:
// 'alipay'  - 支付宝登录
// 'wechat'  - 微信登录  
// 'google'  - 谷歌登录
// 'github'  - GitHub登录

更新用户

更新已登录用户的个人信息。请注意,用户必须处于登录状态才能调用 updateUser() 方法。

// 更新邮箱
const { data, error } = await supabase.auth.updateUser({
  email: 'new****@email.com'
})

// 更新密码
const { data, error } = await supabase.auth.updateUser({
  password: 'new password'
})

注销用户

注销当前登录的用户。

const { error } = await supabase.auth.signOut()

相关文档

  • 了解更多Supabase认证的详细信息,请参见Auth

  • Supabase JavaScript SDK请参见JavaScript

  • 手机号登录更多信息请参见phone-login

  • SMS Hook更多信息请参见SMS Hook