|
|
import os |
|
|
from supabase import create_client, Client |
|
|
|
|
|
|
|
|
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: |
|
|
return {"success": False, "error": response.session.user.identities[0].identity_data['error']} |
|
|
|
|
|
|
|
|
return { |
|
|
"success": True, |
|
|
"user": response.user.model_dump(), |
|
|
"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: |
|
|
return {"success": False, "error": response.session.user.identities[0].identity_data['error']} |
|
|
|
|
|
|
|
|
return { |
|
|
"success": True, |
|
|
"user": response.user.model_dump(), |
|
|
"session": response.session.model_dump(), |
|
|
"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() |
|
|
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() |
|
|
|
|
|
|
|
|
|
|
|
return True |
|
|
except Exception as e: |
|
|
print(f"退出登录出错: {str(e)}") |
|
|
return False |
|
|
|
|
|
def test(self): |
|
|
""" |
|
|
测试方法,返回一个简单的字符串 |
|
|
""" |
|
|
return "Base class test method called" |