위에 로그인 페이지를 만드는 방법 설명
로그인 버튼을 누루면 메인 화면이 나타나고 로그아웃 버튼을 누루면 다시 로그인 페이지가 나타납니다.
[결과 화면]
[코드설명]
# 전체 구조는 아래와 같습니다.
# 세개의 함수를 만들어 사용
# 인증 처리
def authenticate(server, username, password):
# 메인 페이지
def main_page():
# 로그인 페이지
def login_page():
# 로그인 페이지에서 인증 정보를 받아 def authenticate 함수를 호출 하여 인증 처리 확인
# st.session_state['authenticated'] 상태 값을 true 혹은 false로 변경
# st.rerun() 다시 실행하여 st.session_state['authenticated'] 값을 반영하여 화면을 변경함
# 세션 상태에 따라 main_page() 혹은 login_page(): 페이지를 불러오게 설정
# 세션 상태 초기화
if 'authenticated' not in st.session_state:
st.session_state['authenticated'] = False
# 로그인 상태에 따라 페이지 표시
if st.session_state['authenticated']:
main_page()
else:
login_page()
[소스코드]
import streamlit as st
from ldap3 import Server, Connection, ALL
# 인증 처리
def authenticate(server, username, password):
try:
# LDAP 서버에 연결
conn = Connection(server, user=username, password=password)
if conn.bind():
return True
else:
return False
except Exception as e:
st.error(f"인증 오류 : {str(e)}")
return False
#main Page 만들기
def main_page():
if st.button('로그아웃'):
st.session_state['authenticated'] = False
# 현재 상태 값을 false로 변경 후 다시 실행하여 화면을 변경함
st.rerun()
st.title('Active Directory 메인 페이지')
st.write("성공적으로 로그인했습니다.")
#login Page 만들기
def login_page():
st.title('Active Directory 로그인 페이지')
username = st.text_input('로그인 ID')
password = st.text_input('비밀번호', type='password')
server = st.text_input('서버 이름 혹은 IP 주소')
if st.button('로그인'):
if not username:
st.error("로그인 ID를 입력하세요.")
elif not password:
st.error("비밀번호를 입력하세요.")
elif not server:
st.error("서버 이름 혹은 IP를 입력하세요.")
else:
if authenticate(server, username, password):
st.session_state['authenticated'] = True
# 현재 상태 값을 true로 변경 후 다시 실행하여 화면을 변경함
st.rerun()
else:
st.error('로그인 실패')
# 세션 상태 초기화
if 'authenticated' not in st.session_state:
st.session_state['authenticated'] = False
# 로그인 상태에 따라 페이지 표시
if st.session_state['authenticated']:
main_page()
else:
login_page()
댓글