Supabase 身份认证完全指南
返回首页
未分类

Supabase 身份认证完全指南

管理员
2025年12月12日7 分钟阅读5 阅读

学习如何使用 Supabase Auth 实现用户注册、登录、OAuth 社交登录等功能

Supabase 身份认证完全指南

Supabase Auth 是一个功能强大的身份认证解决方案,提供了开箱即用的用户管理功能。本文将带你深入了解如何在项目中集成 Supabase Auth。

为什么选择 Supabase Auth?

  • **免费额度充足**:每月 50,000 活跃用户
  • **多种登录方式**:邮箱、手机、OAuth 社交登录
  • **内置安全机制**:JWT、RLS 行级安全
  • **易于集成**:提供多种语言 SDK

初始化配置

首先安装 Supabase 客户端:

npm install @supabase/supabase-js

创建 Supabase 客户端:

import { createClient } from '@supabase/supabase-js'

const supabase = createClient(

process.env.NEXT_PUBLIC_SUPABASE_URL!,

process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!

)

邮箱密码注册

const { data, error } = await supabase.auth.signUp({

email: 'user@example.com',

password: 'secure-password',

options: {

data: {

full_name: '张三',

avatar_url: 'https://example.com/avatar.png'

}

}

})

if (error) {

console.error('注册失败:', error.message)

} else {

console.log('注册成功,请查收验证邮件')

}

邮箱密码登录

const { data, error } = await supabase.auth.signInWithPassword({

email: 'user@example.com',

password: 'secure-password'

})

if (error) {

console.error('登录失败:', error.message)

} else {

console.log('登录成功:', data.user)

}

OAuth 社交登录

GitHub 登录

const { data, error } = await supabase.auth.signInWithOAuth({

provider: 'github',

options: {

redirectTo: 'https://yoursite.com/auth/callback'

}

})

Google 登录

const { data, error } = await supabase.auth.signInWithOAuth({

provider: 'google',

options: {

redirectTo: 'https://yoursite.com/auth/callback',

queryParams: {

access_type: 'offline',

prompt: 'consent'

}

}

})

获取当前用户

// 获取当前会话

const { data: { session } } = await supabase.auth.getSession()

// 获取当前用户

const { data: { user } } = await supabase.auth.getUser()

if (user) {

console.log('当前用户:', user.email)

}

监听认证状态变化

supabase.auth.onAuthStateChange((event, session) => {

switch (event) {

case 'SIGNED_IN':

console.log('用户已登录')

break

case 'SIGNED_OUT':

console.log('用户已登出')

break

case 'TOKEN_REFRESHED':

console.log('Token 已刷新')

break

}

})

退出登录

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

if (!error) {

console.log('已成功退出登录')

}

密码重置

发送重置邮件

const { error } = await supabase.auth.resetPasswordForEmail(

'user@example.com',

{

redirectTo: 'https://yoursite.com/reset-password'

}

)

更新密码

const { error } = await supabase.auth.updateUser({

password: 'new-secure-password'

})

行级安全 (RLS)

配合 RLS 可以实现数据级别的访问控制:

-- 用户只能查看自己的数据

CREATE POLICY "Users can view own data"

ON profiles FOR SELECT

USING (auth.uid() = user_id);

-- 用户只能更新自己的数据

CREATE POLICY "Users can update own data"

ON profiles FOR UPDATE

USING (auth.uid() = user_id);

最佳实践

  1. **始终验证服务端**:不要只依赖客户端验证
  2. **使用 RLS**:为所有表启用行级安全
  3. **安全存储密钥**:使用环境变量存储敏感信息
  4. **处理错误**:为用户提供友好的错误提示
  5. **定期刷新 Token**:确保会话安全

总结

Supabase Auth 提供了完整的身份认证解决方案,从简单的邮箱登录到复杂的 OAuth 集成都能轻松实现。结合 RLS 行级安全,可以构建安全可靠的应用程序。

未分类

相关推荐