Maison  >  Article  >  développement back-end  >  Secure FastAPI WebSocket : correction des erreurs d'injection de dépendances

Secure FastAPI WebSocket : correction des erreurs d'injection de dépendances

DDD
DDDoriginal
2024-09-13 16:15:50557parcourir

Salut !

Donc, vous essayez de sécuriser votre WebSocket, et ces erreurs d’injection de dépendance apparaissent. Ennuyeux, non ? Ne vous inquiétez pas, j'ai une solution simple et rapide qui vous aidera.

Le problème : les erreurs d'injection de dépendances

Vous êtes tous impatients de sécuriser votre WebSocket, mais boum ! Des erreurs d’injection de dépendances apparaissent.

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

Mais voici une solution simple.

La solution : JWT dans l'en-tête de la requête

Voici l'astuce : utilisez un jeton Web JSON (JWT). Insérez ce jeton dans l’en-tête de la demande et vous êtes en or. Il vous permet de faire des choses intéressantes, comme déterminer qui est l'utilisateur actuel directement dans votre itinéraire WebSocket. Simple et efficace.

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

Pas besoin de jargon sophistiqué. Découvrez cet extrait de code rapide :

`@router.websocket("/create")
async def create_room(websocket : WebSocket, db : Session = Depends(get_db)) :
request_header_dict = dict(websocket.headers)

# check if access_token is in the header
if('access_token' not in request_header_dict.keys()):
    ic("No access token")
    return HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)

# else get access token
access_token = request_header_dict['access_token']

current_user = oauth2.get_current_user(access_token)

# websocket route logic ##

oauth2/py

def verify_access_token(token : str, qualifications_exception) :
ic("verify_access_token")
essayez :

    payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
    id: str = payload.get("user_id")

    if id is None:
        raise credentials_exception
    # token_data = schemas.TokenData(id=id)
except JWTError:
    ic("Error occured")
    raise credentials_exception

# return token_data
return id

def get_current_user(token : str):
qualifications_exception = HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,
detail=f"Impossible de valider les informations d'identification", headers={"WWW-Authenticate": "Bearer"})

db = SessionLocal()
user_id = verify_access_token(token, credentials_exception)  
user = db.query(models.User).filter(models.User.id == user_id).first()  
db.close()
return user`

`#base de données.py
à partir de sqlalchemy import create_engine
à partir de sqlalchemy.ext.declarative import declarative_base
depuis sqlalchemy.orm importer sessionmaker

SQLALCHEMY_DATABASE_URL = 'postgresql psycopg://:@/'

moteur = create_engine(SQLALCHEMY_DATABASE_URL)

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = déclarative_base()

def get_db() :
db = SessionLocal()
essayez :
rendement db
enfin :
db.close()`

Ce n’est pas sorcier ; c'est juste une solution rapide.

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

Juste pour prouver que cela fonctionne, nous avons des captures d'écran de Postman.

Plongez plus profondément : projet ChatRoom

Si vous voulez un aperçu complet, rendez-vous sur mon projet « chatRoom » sur Github. Vous y trouverez tout : pas de secrets, juste un guide simple et toute l'affaire.

Un grand merci

Merci d'être resté là ! Votre temps compte et nous vous remercions de le lire. Restez simple, gardez-le en sécurité.

Bravo,
Aditya Keshari

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn