фикс бага с дублем аккаунтов при логине по нику
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user