Thanks, so I was able to somewhat mimic conditions of the app below. Correct me if I missed anything.
Firstly, Rename folder/directory that have your app pages. From pages
to app_pages
might suffice.
Getting an error on the console that says: “st.navigation was called in an app with a pages/ directory. This may cause unusual app behavior. You may want to rename the pages/ directory.”
Secondly, the below is a simulation of what I think happens in your app.
USER INITIALLY LOGGED IN
def user_logged_in_already():
if "logged_in" not in st.session_state:
st.session_state["logged_in"] = None
if "cookies" not in st.session_state:
st.session_state["cookies"] = {
"logged_in":True,
"user_id":"user_id_here",
"user_email":"email@gmail.com"
}
if "user_id" not in st.session_state:
st.session_state["user_id"] = ""
if "user_email" not in st.session_state:
st.session_state["user_email"] = ""
def get_session_up():
# Load session from cookies
if "cookies" in st.session_state and st.session_state["logged_in"] != True:
cookies = st.session_state["cookies"]
#I need to check if cookies contatins the logged_in key
if cookies is None:
return False
if "logged_in" not in cookies:
return False
st.session_state["logged_in"] = cookies['logged_in']
st.session_state["user_id"] = cookies['user_id']
st.session_state["user_email"] = cookies['user_email']
return True
else:
return False
get_session_up()
home_page = st.Page("pages/Home.py", title="Quanta Home", icon=":material/add_circle:")
login_page = st.Page("pages/Login.py", title="", icon=":material/add_circle:")
doc_page = st.Page("pages/Documents.py", title="Documents", icon=":material/add_circle:")
chat_page = st.Page("pages/Chatbot.py", title="Chatbot", icon=":material/add_circle:")
register_page = st.Page("pages/Register.py", title="Register", icon=":material/add_circle:")
profile_page = st.Page("pages/Profile.py", title="Profile", icon=":material/add_circle:")
usage_page = st.Page("pages/Usage.py", title="Usage", icon=":material/add_circle:")
#if user logged in show a Logout button on sidebar
if st.session_state["logged_in"]!=None:
logout = st.sidebar.button("Logout")
if logout:
st.write("logout")
if st.session_state["logged_in"] != None:
pg = st.navigation([home_page, doc_page, chat_page, profile_page, usage_page], position="sidebar")
else:
pg = st.navigation([login_page, register_page], position="hidden")
pg.run()
get_session_up()
USER NOT INITIALLY LOGGED IN
def user_not_logged_in():
if "logged_in" not in st.session_state:
st.session_state["logged_in"] = None
if "cookies" not in st.session_state:
st.session_state["cookies"] = None
if "user_id" not in st.session_state:
st.session_state["user_id"] = ""
if "user_email" not in st.session_state:
st.session_state["user_email"] = ""
def get_session_up():
# Load session from cookies
if "cookies" in st.session_state and st.session_state["logged_in"] != True:
cookies = st.session_state["cookies"]
#I need to check if cookies contatins the logged_in key
if cookies is None:
return False
if "logged_in" not in cookies:
return False
st.session_state["logged_in"] = cookies['logged_in']
st.session_state["user_id"] = cookies['user_id']
st.session_state["user_email"] = cookies['user_email']
return True
else:
return False
get_session_up()
home_page = st.Page("pages/Home.py", title="Quanta Home", icon=":material/add_circle:")
login_page = st.Page("pages/Login.py", title="", icon=":material/add_circle:")
doc_page = st.Page("pages/Documents.py", title="Documents", icon=":material/add_circle:")
chat_page = st.Page("pages/Chatbot.py", title="Chatbot", icon=":material/add_circle:")
register_page = st.Page("pages/Register.py", title="Register", icon=":material/add_circle:")
profile_page = st.Page("pages/Profile.py", title="Profile", icon=":material/add_circle:")
usage_page = st.Page("pages/Usage.py", title="Usage", icon=":material/add_circle:")
#if user logged in show a Logout button on sidebar
if st.session_state["logged_in"]!=None:
logout = st.sidebar.button("Logout")
if logout:
st.write("logout")
if st.session_state["logged_in"] != None:
pg = st.navigation([home_page, doc_page, chat_page, profile_page, usage_page], position="sidebar")
else:
pg = st.navigation([login_page, register_page], position="hidden")
pg.run()
user_not_logged_in()
In the latter - user_not_logged_in
- navigating to Documents brought up the error. In the former it did not.
Maybe have a look at how you are calling the cookies.
Feel free to correct me if anything is wrong.