ホームページ  >  記事  >  バックエンド開発  >  Secure FastAPI WebSocket: 依存関係注入エラーの修正

Secure FastAPI WebSocket: 依存関係注入エラーの修正

DDD
DDDオリジナル
2024-09-13 16:15:50574ブラウズ

こんにちは!

WebSocket を保護しようとすると、依存関係挿入エラーがポップアップ表示されます。迷惑ですよね?心配しないでください。すぐに解決できる簡単な解決策があります。

問題: 依存性注入エラー

皆さんは WebSocket を保護することに興奮していますが、ブームです!依存性注入エラーが表示されます。

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

しかし、簡単な修正方法があります。

解決策: リクエスト ヘッダーの JWT

これがコツです: JSON Web Token (JWT) を使用します。そのトークンをリクエスト ヘッダーに挿入すれば、成功です。これにより、WebSocket ルート内で現在のユーザーが誰であるかを把握するなど、いくつかの素晴らしいことが可能になります。シンプルかつ効果的です。

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

難しい専門用語は必要ありません。この簡単なコード スニペットを確認してください:

`@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(トークン: str, credentials_Exception):
ic("verify_access_token")
試してみてください:

    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):
credentials_Exception = HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,
詳細=f"資格情報を検証できませんでした"、ヘッダー={"WWW-Authenticate": "ベアラー"})

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`

`#database.py
sqlalchemy import create_engine から
sqlalchemy.ext.declarative import declarative_base
から sqlalchemy.orm からセッションメーカーをインポート

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

エンジン = create_engine(SQLALCHEMY_DATABASE_URL)

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

Base = declarative_base()

def get_db():
db = SessionLocal()
試してみてください:
収量データベース
最後に:
db.close()`

これはロケット科学ではありません。それはただの簡単な解決策です。

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

それが機能することを証明するために、Postman からのスクリーンショットを用意しました。

さらに詳しく: ChatRoom プロジェクト

完全なスクープが必要な場合は、Github 上の私の「chatRoom」プロジェクトにアクセスしてください。そこにはすべてが記載されています。秘密はなく、簡単なガイドと取引全体が記載されているだけです。

本当にありがとう

お付き合いいただきありがとうございました!お時間は大切ですので、ぜひお読みください。シンプルにして安全性を保ちます。

乾杯
アディティヤ・ケシャリ

以上がSecure FastAPI WebSocket: 依存関係注入エラーの修正の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。