Сеанс Fast API Starlette Middleware – невозможно получить доступ к данным сеанса после перенаправленияPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сеанс Fast API Starlette Middleware – невозможно получить доступ к данным сеанса после перенаправления

Сообщение Anonymous »

Я пишу простое веб-приложение, использующее Fast API в качестве серверной части, и хочу, чтобы аутентификация осуществлялась через Azure B2C. Логика всего этого сейчас не очень важна, я просто хочу иметь возможность проверить, что я могу успешно войти в систему, используя разные методы.
Но, после довольно долгих попыток, Не могу понять, почему не могу получить данные пользователей из сессий после перенаправления.

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

import logging
import secrets

from fastapi import FastAPI, Request, HTTPException, status
from fastapi.responses import RedirectResponse, JSONResponse
from starlette.middleware.sessions import SessionMiddleware

from datetime import datetime
import jwt
import time
import json

from logger import logger
from env import *
from db_helpers import *
from mailer import *
from ad_helpers import *
from models import CreateUserRequest, InviteUserRequest, AcceptInvitationRequest, ProcessGoogleTokenRequest, ResendInvitationRequest, UserResponse, CreateUserResponse, InviteUserResponse

# Logging
app = FastAPI()
app.add_middleware(SessionMiddleware, secret_key="your-very-secret-key", max_age=None)
logger.setLevel(logging.DEBUG)

logger.debug(f"B2C Authority: {B2C_AUTHORITY}")

# Middleware to handle session cookies
@app.middleware("http")
async def session_middleware(request: Request, call_next):
response = await call_next(request)
session = request.cookies.get('session')
if session:
response.set_cookie(key='session', value=session, httponly=True)
return response

# FRONT ROUTES

@app.get('/login')
async def login(request: Request):
"""
Get the authorization URL for login.
"""
logger.debug("Executing login function")
auth_url = build_auth_url()
logger.debug(f"Authorization URL: {auth_url}")
return JSONResponse(content={"auth_url": auth_url})

@app.get('/oauth_callback')
async def oauth_callback(request: Request):
"""
Handle the OAuth2 authorization code and store user information in the session.
"""
if 'code' in request.query_params:
logger.debug("Authorization code received: %s", request.query_params['code'])
cache = load_cache(request)
try:
result = build_msal_app(cache=cache).acquire_token_by_authorization_code(
request.query_params['code'],
scopes=[],
redirect_uri=f"{BASE_URL}/oauth_callback")  # Ensure proper URL
logger.debug(f"Token acquisition result: {result}")
if 'error' in result:
logger.error("Error in token acquisition: %s", result['error_description'])
raise HTTPException(status_code=400, detail=f"Error: {result['error_description']}")
user_info = result.get('id_token_claims')
request.session['user'] = user_info
save_cache(request, cache)
logger.debug("Session data saved: %s", request.session['user'])
except Exception as e:
logger.error("Exception during token acquisition: %s", str(e))
raise HTTPException(status_code=500, detail=str(e))
return RedirectResponse("/user-profile")

if not request.session.get('user'):
logger.debug("No user session found, redirecting to login")
return RedirectResponse("/login/")
logger.debug("User session found, redirecting to profile")
return RedirectResponse("/user-profile")

@app.get('/user-profile', response_model=UserResponse)
async def user_profile(request: Request):
"""
Get the user's profile information from the session.
"""
user = request.session.get('user')
logger.debug("user data from session: %s", user)
if not user:
raise HTTPException(status_code=401, detail="User not logged in")

return UserResponse(message="User profile retrieved successfully", email=user['emails'][0], id=user['oid'])
Я буду очень рад вашей помощи или любым подсказкам НА ЧТО мне вообще стоит посмотреть.
Я пытался установить и получить данные пользователя из THEsession, но он все время показывает None.

Подробнее здесь: https://stackoverflow.com/questions/788 ... after-redi
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • CSRF токены Fast API Starlette
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • CSRF токены Fast API Starlette
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • SessionMiddleware FastAPI/Starlette создает новый сеанс для каждого запроса.
    Anonymous » » в форуме Python
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Starlette SessionMiddleware хранит данные сеанса на сервере или на клиенте?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Доступ запрещен при добавлении правила в брандмауэр Windows (INetFwPolicy2) с помощью C# из программы Core Middleware.
    Anonymous » » в форуме C#
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous

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