Error while creating an login form

I have tried running the following code:

Create an empty container

placeholder = st.empty()

actual_email = “email”
actual_password = “password”

Insert a form in the container

with placeholder.form(“login”):
st.markdown(“#### Enter your credentials”)
email = st.text_input(“Email”)
password = st.text_input(“Password”, type=“password”)
submit = st.form_submit_button(“Login”)

if submit and email == actual_email and password == actual_password:
# If the form is submitted and the email and password are correct,
# clear the form/container and display a success message
placeholder.empty()
st.success(“Login successful”)
elif submit and email != actual_email and password != actual_password:
st.error(“Login failed”)
else:
pass

while trying above code I am getting error “‘setIn’ cannot be called on an ElementNode”

What to do in this case? I have referred this in community it says that it is fixed but still I am getting the error.

Hi @manoj_kumar, you can try out the following code:

import streamlit as st

placeholder = st.empty()

actual_email = "email"
actual_password = "password"

with st.form("login"):
    st.markdown("#### Enter your credentials")
    
    email = st.text_input("Email")
    password = st.text_input("Password", type="password")
    
    submit = st.form_submit_button("Login")
    if submit:
        if email == actual_email and password == actual_password:
            placeholder.success("Login successful")
            # do anything else you want to do hereafter

        elif email != actual_email or password != actual_password:
            placeholder.error("Login failed")
            # redirect to anywhere you want to hereafter

The problem you faced was due to:
a. You used placeholder for containing the form; and you empty the same placeholder from within the same form.

Enhancements:
b. you can pass ‘success’ through this placeholder - refer above code.

Cheers

1 Like