Единый вход с Keycloak не перенаправляет на основной видPython

Программы на Python
Ответить
Anonymous
 Единый вход с Keycloak не перенаправляет на основной вид

Сообщение Anonymous »

Я работаю над приложением, имеющим всего одну страницу. После входа пользователя на ту же страницу он видит приложение.
У меня есть логин с именем пользователя и паролем, который работает хорошо. Это означает, что после входа в систему пользователь перенаправляется в приложение.
Я пытался добавить единый вход с помощью Keycloak, но после входа пользователя снова перенаправляется для входа в систему.
Это код:

Код: Выделить всё

...
from keycloak import KeycloakOpenID

# Dummy user database
USER_DB = {
"admin": {"password": "admin_password", "role": "admin"},
"user": {"password": "user_password", "role": "user"}
}

# Configure Keycloak
keycloak_openid = KeycloakOpenID(
server_url="http://localhost:8081",
client_id="bot-app",
realm_name="my-bot",
client_secret_key="XXXX"  # Keycloak client secret
)

def login_with_sso():
auth_url = keycloak_openid.auth_url(redirect_uri="http://localhost:8501")
st.markdown(f"[Login with SSO]({auth_url})")

query_params = st.query_params
if "code" in query_params:
token = keycloak_openid.token(
grant_type="authorization_code",
code=query_params["code"],
redirect_uri="http://localhost:8501"
)
user_info = keycloak_openid.userinfo(token["access_token"])
st.session_state["logged_in"] = True
st.session_state["username"] = user_info["preferred_username"]
st.session_state["access_token"] = token["access_token"]

# Redirect to Google after login
st.experimental_rerun()

def login():
st.title("Login")
choice = st.selectbox("Choose your login method:", ("Username and password", "SSO"))

if choice == "Username and password":
username = st.text_input("Username")
password = st.text_input("Password", type="password")
if st.button("Login"):
user = USER_DB.get(username)
if user and user["password"] == password:
st.session_state["logged_in"] = True
st.session_state["username"] = username
st.session_state["role"] = user["role"]
else:
st.error("Invalid username or password")
elif choice == "SSO":
if st.session_state.get("logged_in"):
st.write("Already logged in as ", st.session_state["username"])
else:
login_with_sso()

def chat_bot(controller1):
# Initialize variables
if "messages" not in st.session_state:
st.session_state.messages = []
if "first_conversation" not in st.session_state:

...

def main():
if "logged_in" not in st.session_state:
st.session_state["logged_in"] = False

if not st.session_state["logged_in"]:
st.image(logo_path, width=150)
login()

else:
#st.set_page_config(layout="wide")
st.title("Test Automation Tool")
controller1 = Controller()

with st.sidebar:
st.image(logo_path, width=150)
selected = option_menu(
menu_title="Menu",
options=["Chat Bot", "Handle Test Cases and Code", "Test Cases Table"],
icons=["robot", "floppy2", "table"],
menu_icon="list"
)

if selected == "Chat Bot":
chat_bot(controller1)
...

if __name__ == "__main__":
main()

Я не уверен, это ошибка в коде или мне следует что-то изменить в конфигурации Keycloak.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -main-view
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»