Как сохранить переменные состояния сеанса в многостраничном приложении в Streamlit ⇐ Python
Как сохранить переменные состояния сеанса в многостраничном приложении в Streamlit
Мое приложение имеет несколько страниц, и при первой загрузке оно определит, есть ли токен доступа в состоянии сеанса, если нет пользователя, щелкнув вход для входа в Azure Id, а затем код будет возвращено в параметрах запроса, а затем будет получен токен доступа, затем я смогу использовать его для отображения некоторых кнопок в зависимости от групп пользователей и т. д.
Это прекрасно работает на моей домашней странице.
Security.py
# Инициализируем MSAL ConfidentialClientApplication приложение = msal.ConfidentialClientApplication(CLIENT_ID, Authority=AUTHORITY, client_credential=CLIENT_SECRET) # Функция для получения URL-адреса авторизации защита get_auth_url(): """ Создайте URL-адрес авторизации для входа пользователя. """ auth_url = app.get_authorization_request_url(SCOPE, redirect_uri=REDIRECT_URI) вернуть auth_url # Функция обмена кода авторизации на токен доступа защита get_token_from_code(auth_code): """ Обменяйте код авторизации на токен доступа. """ результат = app.acquire_token_by_authorization_code(auth_code, области=ОБЛАСТЬ, redirect_uri=REDIRECT_URI) вернуть результат['access_token'] # Функция для получения информации о пользователе защита get_user_info (access_token): """ Получите информацию о пользователе, используя предоставленный токен доступа. """ заголовки = {'Авторизация': f'Носитель {access_token}'} ответ = запросы.get('https://graph.microsoft.com/v1.0/me', заголовки=заголовки) вернуть ответ.json() # Функция для получения групп пользователей с отображаемыми именами защита get_user_groups (access_token): """ Получите группы пользователей с отображаемыми именами, используя предоставленный токен доступа. """ заголовки = {'Авторизация': f'Носитель {access_token}'} параметры = { '$select': 'displayName, id', # Укажите поля, которые вы хотите получить } ответ = запросы.get('https://graph.microsoft.com/v1.0/me/memberOf', headers=headers, params=params) вернуть ответ.json() # Функция для обработки потока перенаправления OAuth2 защита handle_redirect(): """ Обработайте поток перенаправления OAuth2, получите токен доступа и сохраните его в сеансе. """ если не st.session_state.get('access_token'): код = st.experimental_get_query_params().get('код') если код: access_token = get_token_from_code (код) st.session_state['access_token'] = access_token st.experimental_set_query_params() тогда в utils.py есть это:
def setup_page(): если st.experimental_get_query_params().get('код'): # Обработка перенаправления OAuth2, если присутствует код авторизации handle_redirect() access_token = st.session_state.get('access_token')
если access_token: # Если токен доступа доступен, извлеките и отобразите информацию о пользователе и группах. user_info = get_user_info (токен_доступа) st.session_state['user_info'] = user_info # Получить информацию о группе пользователя user_groups = get_user_groups (access_token) st.session_state['user_groups'] = user_groups # Отображение информации о группе пользователя, обработка случаев, когда «displayName» недоступно # если 'значение' в user_groups: # для группы в user_groups['value']: # group_display_name = group.get('displayName', group.get('mailNickname', group["id"])) # group_id = группа["id"] # st.write(group_id) # возвращаем истину еще: # Если токена доступа нет, предложите пользователю войти в систему st.write("Чтобы использовать это приложение, войдите в систему.") auth_url = get_auth_url() st.markdown(f"Войти", unsafe_allow_html=True) ст.стоп() а затем на моей домашней странице и на странице page1.py, page2.py я просто вызываю setup_page.
Однако, когда я перехожу с домашней страницы на страницу 1, session_state теряется, токена доступа больше нет.
Что является причиной этого?
Мое приложение имеет несколько страниц, и при первой загрузке оно определит, есть ли токен доступа в состоянии сеанса, если нет пользователя, щелкнув вход для входа в Azure Id, а затем код будет возвращено в параметрах запроса, а затем будет получен токен доступа, затем я смогу использовать его для отображения некоторых кнопок в зависимости от групп пользователей и т. д.
Это прекрасно работает на моей домашней странице.
Security.py
# Инициализируем MSAL ConfidentialClientApplication приложение = msal.ConfidentialClientApplication(CLIENT_ID, Authority=AUTHORITY, client_credential=CLIENT_SECRET) # Функция для получения URL-адреса авторизации защита get_auth_url(): """ Создайте URL-адрес авторизации для входа пользователя. """ auth_url = app.get_authorization_request_url(SCOPE, redirect_uri=REDIRECT_URI) вернуть auth_url # Функция обмена кода авторизации на токен доступа защита get_token_from_code(auth_code): """ Обменяйте код авторизации на токен доступа. """ результат = app.acquire_token_by_authorization_code(auth_code, области=ОБЛАСТЬ, redirect_uri=REDIRECT_URI) вернуть результат['access_token'] # Функция для получения информации о пользователе защита get_user_info (access_token): """ Получите информацию о пользователе, используя предоставленный токен доступа. """ заголовки = {'Авторизация': f'Носитель {access_token}'} ответ = запросы.get('https://graph.microsoft.com/v1.0/me', заголовки=заголовки) вернуть ответ.json() # Функция для получения групп пользователей с отображаемыми именами защита get_user_groups (access_token): """ Получите группы пользователей с отображаемыми именами, используя предоставленный токен доступа. """ заголовки = {'Авторизация': f'Носитель {access_token}'} параметры = { '$select': 'displayName, id', # Укажите поля, которые вы хотите получить } ответ = запросы.get('https://graph.microsoft.com/v1.0/me/memberOf', headers=headers, params=params) вернуть ответ.json() # Функция для обработки потока перенаправления OAuth2 защита handle_redirect(): """ Обработайте поток перенаправления OAuth2, получите токен доступа и сохраните его в сеансе. """ если не st.session_state.get('access_token'): код = st.experimental_get_query_params().get('код') если код: access_token = get_token_from_code (код) st.session_state['access_token'] = access_token st.experimental_set_query_params() тогда в utils.py есть это:
def setup_page(): если st.experimental_get_query_params().get('код'): # Обработка перенаправления OAuth2, если присутствует код авторизации handle_redirect() access_token = st.session_state.get('access_token')
если access_token: # Если токен доступа доступен, извлеките и отобразите информацию о пользователе и группах. user_info = get_user_info (токен_доступа) st.session_state['user_info'] = user_info # Получить информацию о группе пользователя user_groups = get_user_groups (access_token) st.session_state['user_groups'] = user_groups # Отображение информации о группе пользователя, обработка случаев, когда «displayName» недоступно # если 'значение' в user_groups: # для группы в user_groups['value']: # group_display_name = group.get('displayName', group.get('mailNickname', group["id"])) # group_id = группа["id"] # st.write(group_id) # возвращаем истину еще: # Если токена доступа нет, предложите пользователю войти в систему st.write("Чтобы использовать это приложение, войдите в систему.") auth_url = get_auth_url() st.markdown(f"Войти", unsafe_allow_html=True) ст.стоп() а затем на моей домашней странице и на странице page1.py, page2.py я просто вызываю setup_page.
Однако, когда я перехожу с домашней страницы на страницу 1, session_state теряется, токена доступа больше нет.
Что является причиной этого?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Понимание состояния сеанса и потока управления в приложении Streamlit Chatbot
Anonymous » » в форуме Python - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как сохранить кнопку «предыдущей» видимой в многостраничном учебнике Intro.js?
Anonymous » » в форуме Javascript - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-