Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -25,6 +25,9 @@ if "logged_in" not in st.session_state:
|
|
25 |
st.session_state.logged_in = False
|
26 |
if "current_user" not in st.session_state:
|
27 |
st.session_state.current_user = None
|
|
|
|
|
|
|
28 |
|
29 |
def send_verification_email(id_token):
|
30 |
url = f'https://identitytoolkit.googleapis.com/v1/accounts:sendOobCode?key={FIREBASE_API_KEY}'
|
@@ -41,15 +44,22 @@ def send_verification_email(id_token):
|
|
41 |
return {'status': 'error', 'message': result['error']['message']}
|
42 |
else:
|
43 |
return {'status': 'success', 'email': result['email']}
|
44 |
-
|
45 |
# Callback for registration
|
46 |
def register_callback():
|
47 |
email = st.session_state.reg_email
|
48 |
password = st.session_state.reg_password
|
|
|
49 |
try:
|
|
|
50 |
user = auth.create_user(email=email, password=password)
|
|
|
|
|
|
|
|
|
51 |
st.success("Registration successful! Sending verification email...")
|
52 |
|
|
|
53 |
url = f'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key={FIREBASE_API_KEY}'
|
54 |
data = {
|
55 |
'email': email,
|
@@ -75,12 +85,25 @@ def register_callback():
|
|
75 |
|
76 |
# Callback for login
|
77 |
def login_callback():
|
78 |
-
|
79 |
password = st.session_state.login_password
|
80 |
try:
|
81 |
-
user
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
st.session_state.logged_in = True
|
83 |
st.session_state.current_user = user.uid
|
|
|
84 |
st.success("Logged in successfully!")
|
85 |
except Exception as e:
|
86 |
st.error(f"Login failed: {e}")
|
@@ -89,6 +112,7 @@ def login_callback():
|
|
89 |
def logout_callback():
|
90 |
st.session_state.logged_in = False
|
91 |
st.session_state.current_user = None
|
|
|
92 |
st.info("Logged out successfully!")
|
93 |
|
94 |
# Function to store text in Firebase Realtime Database
|
@@ -109,6 +133,7 @@ def registration_form():
|
|
109 |
with st.form("Registration"):
|
110 |
st.subheader("Register")
|
111 |
email = st.text_input("Email", key="reg_email")
|
|
|
112 |
password = st.text_input("Password (min 6 characters)", type="password", key="reg_password")
|
113 |
submit_button = st.form_submit_button("Register", on_click=register_callback)
|
114 |
|
@@ -116,13 +141,13 @@ def registration_form():
|
|
116 |
def login_form():
|
117 |
with st.form("Login"):
|
118 |
st.subheader("Login")
|
119 |
-
|
120 |
password = st.text_input("Password", type="password", key="login_password")
|
121 |
submit_button = st.form_submit_button("Login", on_click=login_callback)
|
122 |
|
123 |
# Main app screen (after login)
|
124 |
def main_app():
|
125 |
-
st.subheader(f"Welcome, {st.session_state.
|
126 |
st.write("Enter a name below to get a greeting.")
|
127 |
|
128 |
# Input field for name
|
|
|
25 |
st.session_state.logged_in = False
|
26 |
if "current_user" not in st.session_state:
|
27 |
st.session_state.current_user = None
|
28 |
+
if "display_name" not in st.session_state:
|
29 |
+
st.session_state.display_name = None
|
30 |
+
|
31 |
|
32 |
def send_verification_email(id_token):
|
33 |
url = f'https://identitytoolkit.googleapis.com/v1/accounts:sendOobCode?key={FIREBASE_API_KEY}'
|
|
|
44 |
return {'status': 'error', 'message': result['error']['message']}
|
45 |
else:
|
46 |
return {'status': 'success', 'email': result['email']}
|
47 |
+
|
48 |
# Callback for registration
|
49 |
def register_callback():
|
50 |
email = st.session_state.reg_email
|
51 |
password = st.session_state.reg_password
|
52 |
+
display_name = st.session_state.reg_display_name
|
53 |
try:
|
54 |
+
# Step 1: Create a new user in Firebase
|
55 |
user = auth.create_user(email=email, password=password)
|
56 |
+
|
57 |
+
# Step 2: Update the user profile with the display name
|
58 |
+
auth.update_user(user.uid, display_name=display_name)
|
59 |
+
|
60 |
st.success("Registration successful! Sending verification email...")
|
61 |
|
62 |
+
# Step 3: Sign in the user programmatically to get the id_token
|
63 |
url = f'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key={FIREBASE_API_KEY}'
|
64 |
data = {
|
65 |
'email': email,
|
|
|
85 |
|
86 |
# Callback for login
|
87 |
def login_callback():
|
88 |
+
login_identifier = st.session_state.login_identifier
|
89 |
password = st.session_state.login_password
|
90 |
try:
|
91 |
+
# Try to get the user by email first
|
92 |
+
try:
|
93 |
+
user = auth.get_user_by_email(login_identifier)
|
94 |
+
except:
|
95 |
+
# If getting by email fails, try to get the user by display name
|
96 |
+
user_list = auth.list_users()
|
97 |
+
for user_info in user_list.users:
|
98 |
+
if user_info.display_name == login_identifier:
|
99 |
+
user = user_info
|
100 |
+
break
|
101 |
+
else:
|
102 |
+
raise Exception("User not found")
|
103 |
+
|
104 |
st.session_state.logged_in = True
|
105 |
st.session_state.current_user = user.uid
|
106 |
+
st.session_state.display_name = user.display_name # Store the display name
|
107 |
st.success("Logged in successfully!")
|
108 |
except Exception as e:
|
109 |
st.error(f"Login failed: {e}")
|
|
|
112 |
def logout_callback():
|
113 |
st.session_state.logged_in = False
|
114 |
st.session_state.current_user = None
|
115 |
+
st.session_state.display_name = None
|
116 |
st.info("Logged out successfully!")
|
117 |
|
118 |
# Function to store text in Firebase Realtime Database
|
|
|
133 |
with st.form("Registration"):
|
134 |
st.subheader("Register")
|
135 |
email = st.text_input("Email", key="reg_email")
|
136 |
+
display_name = st.text_input("Display Name", key="reg_display_name")
|
137 |
password = st.text_input("Password (min 6 characters)", type="password", key="reg_password")
|
138 |
submit_button = st.form_submit_button("Register", on_click=register_callback)
|
139 |
|
|
|
141 |
def login_form():
|
142 |
with st.form("Login"):
|
143 |
st.subheader("Login")
|
144 |
+
login_identifier = st.text_input("Email or Username", key="login_identifier")
|
145 |
password = st.text_input("Password", type="password", key="login_password")
|
146 |
submit_button = st.form_submit_button("Login", on_click=login_callback)
|
147 |
|
148 |
# Main app screen (after login)
|
149 |
def main_app():
|
150 |
+
st.subheader(f"Welcome, {st.session_state.display_name}!")
|
151 |
st.write("Enter a name below to get a greeting.")
|
152 |
|
153 |
# Input field for name
|