安全 FastAPI WebSocket:修复依赖注入错误

DDD
发布: 2024-09-13 16:15:50
原创
569 人浏览过

嘿那里!

因此,您正在尝试保护您的 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):
凭证异常 = 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()`

这不是火箭科学;而是。这只是一个快速解决方案。

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

Secure FastAPI WebSocket: Fixing Dependency Injection Errors

为了证明它有效,我们有来自 Postman 的屏幕截图。

深入探讨:聊天室项目

如果您想要完整的独家新闻,请前往我在 Github 上的“chatRoom”项目。您会在那里找到一切 - 没有秘密,只有简单的指南和整个交易。

非常感谢

感谢您坚持不懈!您的时间很重要,我们感谢您阅读本文。保持简单,保持安全。

干杯,
阿迪亚·克沙里

以上是安全 FastAPI WebSocket:修复依赖注入错误的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板