こんにちは!
WebSocket を保護しようとすると、依存関係挿入エラーがポップアップ表示されます。迷惑ですよね?心配しないでください。すぐに解決できる簡単な解決策があります。
問題: 依存性注入エラー
皆さんは WebSocket を保護することに興奮していますが、ブームです!依存性注入エラーが表示されます。
しかし、簡単な修正方法があります。
解決策: リクエスト ヘッダーの JWT
これがコツです: JSON Web Token (JWT) を使用します。そのトークンをリクエスト ヘッダーに挿入すれば、成功です。これにより、WebSocket ルート内で現在のユーザーが誰であるかを把握するなど、いくつかの素晴らしいことが可能になります。シンプルかつ効果的です。
難しい専門用語は必要ありません。この簡単なコード スニペットを確認してください:
`@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 ##
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()`
これはロケット科学ではありません。それはただの簡単な解決策です。
それが機能することを証明するために、Postman からのスクリーンショットを用意しました。
さらに詳しく: ChatRoom プロジェクト
完全なスクープが必要な場合は、Github 上の私の「chatRoom」プロジェクトにアクセスしてください。そこにはすべてが記載されています。秘密はなく、簡単なガイドと取引全体が記載されているだけです。
本当にありがとう
お付き合いいただきありがとうございました!お時間は大切ですので、ぜひお読みください。シンプルにして安全性を保ちます。
乾杯
アディティヤ・ケシャリ
以上がSecure FastAPI WebSocket: 依存関係注入エラーの修正の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。