fix: ensure Telegram is always primary in identity links
When a Discord user linked Telegram via the Telegram Login Widget, LinkIdentityAsync incorrectly made Discord primary and Telegram secondary. This broke access to all Telegram groups/sessions because ResolveEffectivePlayerIdAsync returned the (empty) Discord primary. - In /auth/telegram callback, swap LinkIdentityAsync args so Telegram is always treated as the current (primary) account. - Add V022 migration to reverse any existing incorrectly-oriented player_links where Discord is primary and Telegram is secondary. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
-- =============================================================
|
||||||
|
-- V022: Fix incorrectly oriented player_links for Discord↔Telegram
|
||||||
|
-- =============================================================
|
||||||
|
-- Scope: Reverse player_links where Discord was incorrectly made primary
|
||||||
|
-- and Telegram secondary. Telegram (with historical group/session data)
|
||||||
|
-- must always be the primary account.
|
||||||
|
-- =============================================================
|
||||||
|
|
||||||
|
UPDATE player_links pl
|
||||||
|
SET primary_player_id = pl.secondary_player_id,
|
||||||
|
secondary_player_id = pl.primary_player_id
|
||||||
|
FROM players p1, players p2
|
||||||
|
WHERE pl.primary_player_id = p1.id
|
||||||
|
AND pl.secondary_player_id = p2.id
|
||||||
|
AND p1.platform = 'Discord'
|
||||||
|
AND p2.platform = 'Telegram';
|
||||||
@@ -137,9 +137,10 @@ app.MapGet("/auth/telegram", async (HttpContext context, TelegramAuthService aut
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// Always make Telegram the primary (it has the historical data/groups)
|
||||||
await sessionStore.LinkIdentityAsync(
|
await sessionStore.LinkIdentityAsync(
|
||||||
currentPlatform, currentExternalUserId,
|
|
||||||
"Telegram", telegramId.ToString(System.Globalization.CultureInfo.InvariantCulture),
|
"Telegram", telegramId.ToString(System.Globalization.CultureInfo.InvariantCulture),
|
||||||
|
currentPlatform, currentExternalUserId,
|
||||||
name);
|
name);
|
||||||
return Results.Redirect("/profile?linked=telegram");
|
return Results.Redirect("/profile?linked=telegram");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user