fix: JWT auth fallback by slug in WS handler
Some checks failed
Deploy Tracker / deploy (push) Failing after 2s
Some checks failed
Deploy Tracker / deploy (push) Failing after 2s
This commit is contained in:
parent
e39c26d321
commit
ffca92d08a
@ -106,12 +106,21 @@ async def _authenticate(ws: WebSocket, token: str, on_behalf_of: str | None = No
|
|||||||
try:
|
try:
|
||||||
payload = decode_jwt(token)
|
payload = decode_jwt(token)
|
||||||
member_id = payload["sub"]
|
member_id = payload["sub"]
|
||||||
|
# sub can be UUID (Tracker JWT) or slug (legacy BFF JWT)
|
||||||
result = await db.execute(
|
result = await db.execute(
|
||||||
select(Member).where(Member.id == member_id)
|
select(Member).where(Member.id == member_id)
|
||||||
.options(selectinload(Member.agent_config))
|
.options(selectinload(Member.agent_config))
|
||||||
)
|
)
|
||||||
member = result.scalar_one_or_none()
|
member = result.scalar_one_or_none()
|
||||||
logger.info("JWT auth successful for member_id=%s", member_id)
|
if not member and payload.get("slug"):
|
||||||
|
# Fallback: try by slug
|
||||||
|
result = await db.execute(
|
||||||
|
select(Member).where(Member.slug == payload["slug"])
|
||||||
|
.options(selectinload(Member.agent_config))
|
||||||
|
)
|
||||||
|
member = result.scalar_one_or_none()
|
||||||
|
if member:
|
||||||
|
logger.info("JWT auth successful for %s", member.slug)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning("JWT decode failed: %s", e)
|
logger.warning("JWT decode failed: %s", e)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user