Spaces:
Sleeping
Sleeping
File size: 1,945 Bytes
afd21fc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | import streamlit as st
from auth import generate_otp, create_jwt, verify_jwt
st.set_page_config(page_title="FitPlan AI Login")
# Initialize session state
if "otp" not in st.session_state:
st.session_state.otp = None
if "authenticated" not in st.session_state:
st.session_state.authenticated = False
if "token" not in st.session_state:
st.session_state.token = None
st.title("🔐 FitPlan AI - OTP Login")
# ------------------------
# STEP 1: Enter Email
# ------------------------
if not st.session_state.authenticated:
email = st.text_input("Enter your Email")
if st.button("Send OTP"):
if email:
otp = generate_otp()
st.session_state.otp = otp
st.session_state.email = email
# In real system, send via email/SMS
st.success(f"OTP Sent! (Demo OTP: {otp})")
else:
st.error("Please enter email")
# ------------------------
# STEP 2: Verify OTP
# ------------------------
if st.session_state.otp:
entered_otp = st.text_input("Enter OTP")
if st.button("Verify OTP"):
if entered_otp == st.session_state.otp:
token = create_jwt(st.session_state.email)
st.session_state.token = token
st.session_state.authenticated = True
st.success("Login Successful!")
st.rerun()
else:
st.error("Invalid OTP")
# ------------------------
# Protected Page
# ------------------------
else:
decoded = verify_jwt(st.session_state.token)
if decoded:
st.success(f"Welcome {decoded['email']} 🎉")
st.write("You can now access FitPlan AI")
if st.button("Logout"):
st.session_state.authenticated = False
st.session_state.token = None
st.session_state.otp = None
st.rerun()
else:
st.error("Session Expired") |