File size: 3,977 Bytes
85bdbf2 b83d95f c47a6e5 85bdbf2 b83d95f 0da2ad8 85bdbf2 0da2ad8 b83d95f 6b35a93 85bdbf2 6b35a93 0da2ad8 85bdbf2 b55b191 0da2ad8 b55b191 0da2ad8 85bdbf2 0da2ad8 85bdbf2 171e20d 85bdbf2 b83d95f 85bdbf2 c47a6e5 0da2ad8 c47a6e5 0da2ad8 c47a6e5 0da2ad8 c47a6e5 0da2ad8 85bdbf2 b55b191 171e20d b55b191 171e20d 85bdbf2 0da2ad8 6b35a93 5ed1618 6b35a93 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# components/auth.py
from utils.db import sign_up_user, login_user, supabase
import gradio as gr
def register(email, password, gender, username):
"""Handler for the signup process, now including username."""
if not all([email, password, gender, username]):
return "β All fields are required.", gr.update(), gr.update(), gr.update(), gr.update()
result = sign_up_user(email, password, gender, username)
if result and result.user:
message = "β
Signup successful! You can now log in."
if result.user and not result.session:
message = "β
Signup successful! Please check your email to confirm your account."
# On success, clear all four signup fields
return message, "", "", None, ""
if hasattr(result, 'error') and result.error:
# Check for unique constraint violation on username
if 'duplicate key value violates unique constraint "users_username_key"' in result.error.message:
return "β Signup Failed: This username is already taken.", gr.update(), gr.update(), gr.update(), gr.update()
return f"β Signup Failed: {result.error.message}", gr.update(), gr.update(), gr.update(), gr.update()
return "β Signup failed. An unknown error occurred.", gr.update(), gr.update(), gr.update(), gr.update()
def login(email, password, current_user_state):
"""Handler for login. Now fetches username and gender from the database."""
if not email or not password:
return "β Email and password cannot be empty.", current_user_state, gr.update()
result = login_user(email, password)
if result and result.session:
try:
# Fetch username and gender in a single query for efficiency
profile = supabase.table("users").select("gender, username").eq("id", result.user.id).single().execute()
user_gender = profile.data.get("gender") if profile.data else None
user_name = profile.data.get("username") if profile.data else "User"
except Exception as e:
print(f"Could not fetch user profile: {e}")
user_gender = None
user_name = "User"
# Add username to the user's session state
new_user_state = {"email": email, "id": result.user.id, "logged_in": True, "gender": user_gender, "username": user_name}
return f"β
Welcome, {user_name}! Redirecting...", new_user_state, gr.Tabs(selected="prediction_tab")
if hasattr(result, 'error') and result.error:
return f"β Login Failed: {result.error.message}", current_user_state, gr.update()
return "β Login failed. Check credentials or confirm your email.", current_user_state, gr.update()
def logout(current_user_state):
"""Handler for logout. Clears all state and form fields."""
new_user_state = {"email": None, "id": None, "logged_in": False, "gender": None, "username": None}
return (
"π Logged out successfully.", # 1. auth_message
new_user_state, # 2. user_state
gr.Tabs(selected="home_tab"), # 3. main_tabs
"", # 4. email_login
"", # 5. pwd_login
None, # 6. preg
None, # 7. glucose
None, # 8. bp
None, # 9. insulin
None, # 10. bmi
None, # 11. age
"", # 12. result_output
gr.update(visible=False), # 13. pregnancies_row
None, # 14. weight (NEW)
None, # 15. height (NEW)
None # 16. bmi_choice (NEW)
) |