I have to click the login button twice initially to show the welcome message
if 'username' not in st.session_state:
st.session_state.username = ' '
if st.session_state.username:
st.write('welcome ',st.session_state.username)
else:
st.title('Login/Signup')
email = st.text_input('Email')
password = st.text_input('Password',type='password')
if st.button('Login'):
try:
userinfo = sign_in_with_email_and_password(email,password)
st.session_state.username = userinfo['username']
st.session_state.useremail = userinfo['email']
except:
st.warning('Login Failed')
I am trying to create a login form. Once a person is logged in using correct user name and password, only then userinfo[âusernameâ] will contain a value. Not sure how to display the welcome message on the first button click itself. If I click the button twice, then it is working fine.
I have already tried it. st.rerun() fails inside the try except blocks.
Error:
RerunData(page_script_hash=âd575aef6f69f53c7a18ce42c5b281cbbâ, is_fragment_scoped_rerun=True)
Ah yes, I should have thought of that. The problem is that the way that st.rerun works is that it raises a special exception, and that tells Streamlit that it needs to rerun the page.
The best situation would be to figure out what sort of error the sign_in_with_email_and_password would raise, or just raise one yourself, and handle that specific error.
For example:
def sign_in_with_email_and_password(email, password):
# Replace with real implementation
if (email, password) not in get_logins():
raise ValueError("Invalid login")