import os from supabase import create_client, Client # 创建 Base 类,Base类主要实现应用的用户管理,数据库连接等功能 class Base: def __init__(self): supabase_url = os.getenv("SUPABASE_URL") supabase_key = os.getenv("SUPABASE_KEY") if not supabase_url or not supabase_key: raise ValueError("SUPABASE_URL and SUPABASE_KEY environment variables must be set.") self.supabase: Client = create_client(supabase_url, supabase_key) def sign_up_with_email(self, email, password): """ 使用邮箱和密码注册新用户 Args: email: 用户邮箱 password: 用户密码 Returns: 成功返回用户数据,失败返回错误信息 """ try: # 发送注册请求 response = self.supabase.auth.sign_up({ "email": email, "password": password }) # 检查是否有错误 if response.user is None: # Supabase Python SDK 在错误时 user 为 None return {"success": False, "error": response.session.user.identities[0].identity_data['error']} # 尝试获取更具体的错误信息 # 注册成功 return { "success": True, "user": response.user.model_dump(), # 将 UserModel 转换为字典 "message": "注册成功!请检查邮箱完成验证。" } except Exception as e: return {"success": False, "error": str(e)} def sign_in_with_email(self, email, password): """ 使用邮箱和密码登录 Args: email: 用户邮箱 password: 用户密码 Returns: 成功返回用户数据和会话信息,失败返回错误信息 """ try: # 发送登录请求 response = self.supabase.auth.sign_in_with_password({ "email": email, "password": password }) # 检查是否有错误 if response.user is None: # Supabase Python SDK 在错误时 user 为 None return {"success": False, "error": response.session.user.identities[0].identity_data['error']} # 尝试获取更具体的错误信息 # 登录成功,保存会话信息 return { "success": True, "user": response.user.model_dump(), # 将 UserModel 转换为字典 "session": response.session.model_dump(), # 将 SessionModel 转换为字典 "message": "登录成功!" } except Exception as e: return {"success": False, "error": str(e)} def get_current_user(self): """ 获取当前登录用户 Returns: 用户信息或 None """ try: # 获取当前会话 response = self.supabase.auth.get_session() if response.session: return response.user.model_dump() # 将 UserModel 转换为字典 else: return None except Exception as e: print(f"获取用户信息出错: {str(e)}") return None def sign_out(self): """ 退出登录 Returns: 成功返回 True,失败返回 False """ try: response = self.supabase.auth.sign_out() # Supabase Python SDK 的 sign_out 不直接返回 error 属性, # 成功时通常返回 None 或一个空对象 # 如果有异常会直接抛出 return True except Exception as e: print(f"退出登录出错: {str(e)}") return False def test(self): """ 测试方法,返回一个简单的字符串 """ return "Base class test method called"