아래 변경 사항 정리 내역 입니다.
1. 서버 정보 입력
서버의 IP를 하드 코딩으로 넣다 보니 다른 환경에 적응하기 어려울 듯 하여 서버의 이름 혹은 IP를 받아서 인증을 할 수 있게 구성
입력창에 서버 정보를 받는 창을 추가
server = st.text_input('서버 이름 혹은 IP 주소')
입력 받은 정보를 authenticate 모듈을 호출하여 결과값에 따라 로그인 성공 유무 확인
if authenticate(server, username, password):
st.success('로그인 성공')
else:
st.error('로그인 실패')
authenticate 모듈에 입력 받은 값을 넣는다.
입력 받은 값을 conn 변수에 넣는다.
연결 (bind) 하여 성공적으로 연결 되는지 확인 한다.
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
2. 로그인 에러 메시지를 나타나게 구성
위에 연결 화면에 try, excep 처리를 하여 오류가 발생하는지 확인하고 오류가 발생하게 되면 화면에 메시지 표시
아래 인증 오류 : 오류 메시지
3. 로그인ID, 비밀번호, 서버정보 Null 처리
해당 값을 넣지 않으면 오류가 나타나게 구성
로그인 버튼을 클릭하게 되면 아래 If 조건에 의해 값이 입력 되지 않으면 오류가 나타나게 구성
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.success('로그인 성공')
else:
st.error('로그인 실패')
변경 된 소스 코드
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
# Streamlit UI
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.success('로그인 성공')
else:
st.error('로그인 실패')
댓글