Update components/auth.py
Browse files- components/auth.py +23 -24
components/auth.py
CHANGED
|
@@ -3,34 +3,31 @@
|
|
| 3 |
from utils.db import sign_up_user, login_user, supabase
|
| 4 |
import gradio as gr
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
if not all([email, password, gender]):
|
| 11 |
-
# Return a no-op for all 4 output components on failure
|
| 12 |
-
return "β Email, password, and gender are required.", gr.update(), gr.update(), gr.update()
|
| 13 |
|
| 14 |
-
|
| 15 |
-
result = sign_up_user(email, password, gender)
|
| 16 |
|
| 17 |
if result and result.user:
|
| 18 |
message = "β
Signup successful! You can now log in."
|
| 19 |
if result.user and not result.session:
|
| 20 |
message = "β
Signup successful! Please check your email to confirm your account."
|
| 21 |
-
# On success, clear all
|
| 22 |
-
return message, "", "", None
|
| 23 |
|
| 24 |
if hasattr(result, 'error') and result.error:
|
| 25 |
-
#
|
| 26 |
-
|
|
|
|
|
|
|
| 27 |
|
| 28 |
-
|
| 29 |
-
return "β Signup failed. An unknown error occurred.", gr.update(), gr.update(), gr.update()
|
| 30 |
|
| 31 |
|
| 32 |
def login(email, password, current_user_state):
|
| 33 |
-
"""Handler for login. Now fetches
|
| 34 |
if not email or not password:
|
| 35 |
return "β Email and password cannot be empty.", current_user_state, gr.update()
|
| 36 |
|
|
@@ -38,14 +35,18 @@ def login(email, password, current_user_state):
|
|
| 38 |
|
| 39 |
if result and result.session:
|
| 40 |
try:
|
| 41 |
-
|
|
|
|
| 42 |
user_gender = profile.data.get("gender") if profile.data else None
|
|
|
|
| 43 |
except Exception as e:
|
| 44 |
print(f"Could not fetch user profile: {e}")
|
| 45 |
user_gender = None
|
|
|
|
| 46 |
|
| 47 |
-
|
| 48 |
-
|
|
|
|
| 49 |
|
| 50 |
if hasattr(result, 'error') and result.error:
|
| 51 |
return f"β Login Failed: {result.error.message}", current_user_state, gr.update()
|
|
@@ -54,12 +55,10 @@ def login(email, password, current_user_state):
|
|
| 54 |
|
| 55 |
|
| 56 |
def logout(current_user_state):
|
| 57 |
-
"""Handler for logout.
|
| 58 |
-
new_user_state = {"email": None, "id": None, "logged_in": False, "gender": None}
|
| 59 |
|
| 60 |
-
# The return order must match the outputs list in app.py exactly
|
| 61 |
return (
|
| 62 |
"π Logged out successfully.", new_user_state, gr.Tabs(selected="home_tab"),
|
| 63 |
-
"", "", None, None, None, None, None, None, "",
|
| 64 |
-
gr.update(visible=False) # Hide pregnancies row
|
| 65 |
)
|
|
|
|
| 3 |
from utils.db import sign_up_user, login_user, supabase
|
| 4 |
import gradio as gr
|
| 5 |
|
| 6 |
+
def register(email, password, gender, username):
|
| 7 |
+
"""Handler for the signup process, now including username."""
|
| 8 |
+
if not all([email, password, gender, username]):
|
| 9 |
+
return "β All fields are required.", gr.update(), gr.update(), gr.update(), gr.update()
|
|
|
|
|
|
|
|
|
|
| 10 |
|
| 11 |
+
result = sign_up_user(email, password, gender, username)
|
|
|
|
| 12 |
|
| 13 |
if result and result.user:
|
| 14 |
message = "β
Signup successful! You can now log in."
|
| 15 |
if result.user and not result.session:
|
| 16 |
message = "β
Signup successful! Please check your email to confirm your account."
|
| 17 |
+
# On success, clear all four signup fields
|
| 18 |
+
return message, "", "", None, ""
|
| 19 |
|
| 20 |
if hasattr(result, 'error') and result.error:
|
| 21 |
+
# Check for unique constraint violation on username
|
| 22 |
+
if 'duplicate key value violates unique constraint "users_username_key"' in result.error.message:
|
| 23 |
+
return "β Signup Failed: This username is already taken.", gr.update(), gr.update(), gr.update(), gr.update()
|
| 24 |
+
return f"β Signup Failed: {result.error.message}", gr.update(), gr.update(), gr.update(), gr.update()
|
| 25 |
|
| 26 |
+
return "β Signup failed. An unknown error occurred.", gr.update(), gr.update(), gr.update(), gr.update()
|
|
|
|
| 27 |
|
| 28 |
|
| 29 |
def login(email, password, current_user_state):
|
| 30 |
+
"""Handler for login. Now fetches username and gender from the database."""
|
| 31 |
if not email or not password:
|
| 32 |
return "β Email and password cannot be empty.", current_user_state, gr.update()
|
| 33 |
|
|
|
|
| 35 |
|
| 36 |
if result and result.session:
|
| 37 |
try:
|
| 38 |
+
# Fetch username and gender in a single query for efficiency
|
| 39 |
+
profile = supabase.table("users").select("gender, username").eq("id", result.user.id).single().execute()
|
| 40 |
user_gender = profile.data.get("gender") if profile.data else None
|
| 41 |
+
user_name = profile.data.get("username") if profile.data else "User"
|
| 42 |
except Exception as e:
|
| 43 |
print(f"Could not fetch user profile: {e}")
|
| 44 |
user_gender = None
|
| 45 |
+
user_name = "User"
|
| 46 |
|
| 47 |
+
# Add username to the user's session state
|
| 48 |
+
new_user_state = {"email": email, "id": result.user.id, "logged_in": True, "gender": user_gender, "username": user_name}
|
| 49 |
+
return f"β
Welcome, {user_name}! Redirecting...", new_user_state, gr.Tabs(selected="prediction_tab")
|
| 50 |
|
| 51 |
if hasattr(result, 'error') and result.error:
|
| 52 |
return f"β Login Failed: {result.error.message}", current_user_state, gr.update()
|
|
|
|
| 55 |
|
| 56 |
|
| 57 |
def logout(current_user_state):
|
| 58 |
+
"""Handler for logout. Clears all state and form fields."""
|
| 59 |
+
new_user_state = {"email": None, "id": None, "logged_in": False, "gender": None, "username": None}
|
| 60 |
|
|
|
|
| 61 |
return (
|
| 62 |
"π Logged out successfully.", new_user_state, gr.Tabs(selected="home_tab"),
|
| 63 |
+
"", "", None, None, None, None, None, None, "", gr.update(visible=False)
|
|
|
|
| 64 |
)
|