嘿那里!
因此,您正在尝试保护您的 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):
凭证异常 = HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,
详细信息 = f“无法验证凭据”, headers = {“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 导入 create_engine
从 sqlalchemy.ext.declarative 导入 declarative_base
从 sqlalchemy.orm 导入 sessionmaker
SQLALCHEMY_DATABASE_URL = 'postgresql psycopg://:@/'
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False,autoflush=False,bind=engine)
Base = declarative_base()
def get_db():
db = SessionLocal()
尝试:
产量数据库
最后:
db.close()`
这不是火箭科学;而是。这只是一个快速解决方案。
为了证明它有效,我们有来自 Postman 的屏幕截图。
深入探讨:聊天室项目
如果您想要完整的独家新闻,请前往我在 Github 上的“chatRoom”项目。您会在那里找到一切 - 没有秘密,只有简单的指南和整个交易。
非常感谢
感谢您坚持不懈!您的时间很重要,我们感谢您阅读本文。保持简单,保持安全。
干杯,
阿迪亚·克沙里
以上是安全 FastAPI WebSocket:修复依赖注入错误的详细内容。更多信息请关注PHP中文网其他相关文章!