фикс бага с дублем аккаунтов при логине по нику

This commit is contained in:
2026-06-26 15:33:27 +03:00
parent f4286ffa6c
commit 8f4a58d33d
2 changed files with 55 additions and 2 deletions
+14 -2
View File
@@ -10,7 +10,7 @@ from fastapi import APIRouter, Depends, Request, Response
from sqlmodel import Session, select
from app.auth.dev_stub import DevStubProvider
from app.auth.login import login_with_identity
from app.auth.login import establish_session, login_with_identity
from app.auth.provider import ExternalIdentity
from app.db.session import get_session
from app.models import User
@@ -28,7 +28,19 @@ def dev_login(
response: Response,
session: Session = Depends(get_session),
) -> s.MeRead:
identity = DevStubProvider().authenticate({"nickname": body.nickname})
# Dev-вход «стать игроком с этим ником». Если такой игрок уже есть (любого провайдера —
# Telegram, или stub с изменённым позже ником), входим именно в него, а не плодим дубли.
# Только если игрока с таким ником нет — создаём нового stub-пользователя.
nickname = (body.nickname or "").strip()
existing = (
session.exec(select(User).where(User.nickname == nickname)).first()
if nickname
else None
)
if existing is not None:
user = establish_session(session, response, request, existing, existing.auth_provider)
return build_me(session, user)
identity = DevStubProvider().authenticate({"nickname": nickname})
user = login_with_identity(session, response, request, identity)
return build_me(session, user)