Is it possible to use multipage app feature with user authentication with streamlit? I’ve made a multipage app with strealit-authenticator, but when i make an authentication for user in my “main page” the login page appear and protect only on the “main page”, other pages can access on the sidebar without having to login.
Please help! Thank you…
i also encountered this question. have you already solved it?
This can be soived using st.session_state in Streamlit. You can setup the main file like:
import streamlit as st
import streamlit_authenticator as stauth
import yaml
from yaml.loader import SafeLoader
st.set_page_config(page_title="Home", page_icon="🏠", layout="wide")
def st_authenticator():
with open('data/config.yaml') as file:
config = yaml.load(file, Loader=SafeLoader)
file.close()
authenticator = stauth.Authenticate(
config['credentials'],
config['cookie']['name'],
config['cookie']['key'],
config['cookie']['expiry_days'],
config['preauthorized']
)
return authenticator
authenticator = st_authenticator()
name, authentication_status, username = authenticator.login("Login", "main")
if authentication_status:
st.session_state.authentication_status = True
authenticator.logout('**Logout**', 'main', key='unique_key')
elif authentication_status is False:
st.session_state.authentication_status = False
st.error('Username/password is incorrect')
elif authentication_status is None:
st.session_state.authentication_status = None
st.warning('Please enter your username and password')
And include the below line of code in other pages (after importing libraries). For example in ‘pages/1_FirstPage.py’
# import libraries here
if not st.session_state.authentication_status:
st.info('Please Login from the Home page and try again.')
st.stop()
# rest of the operations
Hi, I’m using this solution. But i found an issue if you reload the page in another page that doesn’t have the st.session_statue.authentication_status initialization it shows an error because it doesn’t exist.
Also is there any way to hide the options in the multi page menu in the case it isn’t initialized? or to redirect to the home and go back?
Thanks in advance
Did anyone find a solution for this problem? I am facing it right now as well…
if not st.session_state.get('authentication_status', False):
st.info('Please Login from the Home page and try again.')
st.stop()
I make a sample streamlit app dedicated for multi-page using the streamlit-authenticator library that can be used as a template or just for learning. It has login page, etc and can survive page reloads - meaning the user is re-logged in automatically. It also supports a user role, admin or not, and page are shown depending on the role of the user who logged in.
There’s also a demo app from @blackary showung how to create a multipage app with authentication
Demo app at:
Hope that helps!
wish this demo could help: