Jon Solow
commited on
Commit
·
56d0518
1
Parent(s):
a27d436
Connect existing user email form and display user name when logged in
Browse files- src/login.py +58 -11
src/login.py
CHANGED
@@ -53,10 +53,42 @@ def check_email(email: str) -> bool:
|
|
53 |
|
54 |
def new_user_form():
|
55 |
"""Form to collect new user information and submit"""
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
|
61 |
|
62 |
def create_new_user_request(email: str, name: str):
|
@@ -88,19 +120,18 @@ def new_user_submitted():
|
|
88 |
)
|
89 |
return
|
90 |
create_new_user_request(email, name)
|
|
|
|
|
91 |
|
92 |
|
93 |
def check_password():
|
94 |
# if not logged in offer new user registration
|
95 |
-
if
|
96 |
-
|
|
|
97 |
return True
|
98 |
else:
|
99 |
new_user_form()
|
100 |
-
|
101 |
-
# Return True if the token is validated.
|
102 |
-
if st.session_state.get("password_correct", False):
|
103 |
-
return True
|
104 |
return False
|
105 |
|
106 |
|
@@ -134,7 +165,6 @@ def login_by_token(token: str):
|
|
134 |
for row in df.itertuples():
|
135 |
if hmac.compare_digest(row.token, token):
|
136 |
user_id = int(row.id)
|
137 |
-
st.session_state["password_correct"] = True
|
138 |
st.session_state["logged_in_user"] = user_id
|
139 |
return True
|
140 |
return False
|
@@ -147,3 +177,20 @@ def email_exists(email: str):
|
|
147 |
ttl=1,
|
148 |
)
|
149 |
return bool(email in df.email.tolist())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
|
54 |
def new_user_form():
|
55 |
"""Form to collect new user information and submit"""
|
56 |
+
if st.button("Existing User get Login link"):
|
57 |
+
existing_user_new_token()
|
58 |
+
else:
|
59 |
+
"""Form to collect new user information and submit"""
|
60 |
+
with st.form("New User Registration"):
|
61 |
+
st.header("New User Registration")
|
62 |
+
st.write("After submitting, a url to login will be emailed to you.")
|
63 |
+
st.text_input("Email Address", key="new_user_email")
|
64 |
+
st.text_input("Name", key="new_user_name")
|
65 |
+
st.form_submit_button("Submit", on_click=new_user_submitted)
|
66 |
+
|
67 |
+
|
68 |
+
def existing_user_new_token():
|
69 |
+
with st.form("Existing User New URL"):
|
70 |
+
st.header("Existing User Login Link Request")
|
71 |
+
st.write("After submitting, a url to login will be emailed to you if a user with the email exists.")
|
72 |
+
st.text_input("Email Address", key="reset_token_user_email")
|
73 |
+
st.form_submit_button("Submit", on_click=generate_new_token_request)
|
74 |
+
|
75 |
+
|
76 |
+
def generate_new_token_request():
|
77 |
+
if not check_email(email := st.session_state["reset_token_user_email"]):
|
78 |
+
st.warning("Sorry email is invalid. Please try a valid email address.")
|
79 |
+
return
|
80 |
+
|
81 |
+
conn.update(
|
82 |
+
worksheet="token-requests",
|
83 |
+
data=pd.DataFrame(
|
84 |
+
{
|
85 |
+
"email": email,
|
86 |
+
},
|
87 |
+
index=[0],
|
88 |
+
),
|
89 |
+
)
|
90 |
+
st.info("Request submitted. Please check your email for a login url with a few minutes.")
|
91 |
+
del st.session_state["reset_token_user_email"]
|
92 |
|
93 |
|
94 |
def create_new_user_request(email: str, name: str):
|
|
|
120 |
)
|
121 |
return
|
122 |
create_new_user_request(email, name)
|
123 |
+
del st.session_state["new_user_email"]
|
124 |
+
del st.session_state["new_user_name"]
|
125 |
|
126 |
|
127 |
def check_password():
|
128 |
# if not logged in offer new user registration
|
129 |
+
if st.session_state.get("logged_in_user"):
|
130 |
+
_, name = get_logged_in_user_name_email()
|
131 |
+
st.write(f"Logged in as: {name}")
|
132 |
return True
|
133 |
else:
|
134 |
new_user_form()
|
|
|
|
|
|
|
|
|
135 |
return False
|
136 |
|
137 |
|
|
|
165 |
for row in df.itertuples():
|
166 |
if hmac.compare_digest(row.token, token):
|
167 |
user_id = int(row.id)
|
|
|
168 |
st.session_state["logged_in_user"] = user_id
|
169 |
return True
|
170 |
return False
|
|
|
177 |
ttl=1,
|
178 |
)
|
179 |
return bool(email in df.email.tolist())
|
180 |
+
|
181 |
+
|
182 |
+
def get_logged_in_user_name_email() -> tuple[str | None, str | None]:
|
183 |
+
if not (user_id := st.session_state.get("logged_in_user")):
|
184 |
+
# if not logged
|
185 |
+
return (None, None)
|
186 |
+
|
187 |
+
df = conn.read(
|
188 |
+
worksheet="users",
|
189 |
+
usecols=[0, 1, 2],
|
190 |
+
ttl=1,
|
191 |
+
)
|
192 |
+
|
193 |
+
user_info_series = df[df["id"] == user_id].squeeze()
|
194 |
+
email = user_info_series["email"]
|
195 |
+
name = user_info_series["name"]
|
196 |
+
return email, name
|