Summary
cant login to the plot page after sign up.
Error: log in failed
Steps to reproduce
My goal is to have a landing page where user can signup and then login with their user-ID and password and then take them to the plot app page
Code snippet:
import streamlit as st
import sqlite3
import bcrypt
from sample import plot_page # Import the plot page
# Database setup
conn = sqlite3.connect('user.db')
cursor = conn.cursor()
def create_table():
cursor.execute('''CREATE TABLE IF NOT EXISTS users
(uid TEXT PRIMARY KEY, email TEXT, password TEXT)''')
conn.commit()
def insert_user(email, password, uid):
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
cursor.execute("INSERT INTO users (uid, email, password) VALUES (?, ?, ?)", (uid, email, hashed_password))
conn.commit()
def get_user_by_email(email):
cursor.execute("SELECT * FROM users WHERE email=?", (email))
data=cursor.fetchall()
return data
def verify_password(password, hashed_password):
return bcrypt.checkpw(password.encode('utf-8'), hashed_password.encode('utf-8'))
# App functions
def app():
create_table()
st.title('Welcome to :blue[Taiwo]')
if 'username' not in st.session_state:
st.session_state.username = ''
if 'useremail' not in st.session_state:
st.session_state.useremail = ''
if 'loggedin' not in st.session_state:
st.session_state.loggedin = False # New state variable to track login status
def f():
try:
user = get_user_by_email(email)
if user and verify_password(password, user[2]):
st.session_state.username = user[0]
st.session_state.useremail = user[1]
st.session_state.loggedin = True # Set login status to True
else:
st.warning('Login Failed')
except:
st.warning('Login Failed')
def t():
st.session_state.loggedin = False # Set login status to False
st.session_state.username = ''
st.session_state.useremail = ''
if not st.session_state.loggedin:
choice = st.selectbox('Login/Signup', ['Login', 'Sign up'])
email = st.text_input('Email Address')
password = st.text_input('Password', type='password')
if choice == 'Sign up':
username = st.text_input("Enter your unique username")
if st.button('Create my account'):
insert_user(email, password, username)
st.success('Account created successfully!')
st.markdown('Please Login using your email and password')
st.balloons()
else:
st.button('Login', on_click=f)
if st.session_state.loggedin:
st.text('Username: ' + st.session_state.username)
st.text('Email id: ' + st.session_state.useremail)
st.button('Sign out', on_click=t)
plot_page() # Display plot page if logged in
# Run the app
if __name__ == '__main__':
app()