From 63193310f24990de7b1be9ca47e53a43a0f20730 Mon Sep 17 00:00:00 2001 From: Toutsu Date: Mon, 25 May 2026 14:39:24 +0300 Subject: [PATCH] hotfix: fix Blazor circuit crash on Discord link + add missing avatar_url column - Replace @onclick button with plain to avoid circuit disconnect from forceLoad navigation during event handlers. - Add query param handling (?linked, ?link_error) in Profile.razor for Discord callback feedback. - Add V021 migration: ALTER TABLE players ADD COLUMN avatar_url. Co-Authored-By: Claude Opus 4.7 --- .../Migrations/V021__add_avatar_url.sql | 8 ++++++ .../Components/Pages/Profile.razor | 26 +++++++++++++------ 2 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 src/GmRelay.Bot/Migrations/V021__add_avatar_url.sql diff --git a/src/GmRelay.Bot/Migrations/V021__add_avatar_url.sql b/src/GmRelay.Bot/Migrations/V021__add_avatar_url.sql new file mode 100644 index 0000000..7b720bf --- /dev/null +++ b/src/GmRelay.Bot/Migrations/V021__add_avatar_url.sql @@ -0,0 +1,8 @@ +-- ============================================================= +-- V021: Add avatar_url column to players table +-- ============================================================= +-- Scope: Support storing avatar URLs for Discord and other platforms. +-- ============================================================= + +ALTER TABLE players + ADD COLUMN avatar_url VARCHAR(500); diff --git a/src/GmRelay.Web/Components/Pages/Profile.razor b/src/GmRelay.Web/Components/Pages/Profile.razor index cb7e9cd..1371aa6 100644 --- a/src/GmRelay.Web/Components/Pages/Profile.razor +++ b/src/GmRelay.Web/Components/Pages/Profile.razor @@ -3,7 +3,6 @@ @using Microsoft.AspNetCore.Components.Authorization @attribute [Authorize] @inject ISessionStore SessionStore -@inject NavigationManager Navigation Профиль — GM-Relay @@ -54,9 +53,9 @@

Добавить аккаунт

@if (!HasLinkedPlatform("Discord")) { -
+ } else { @@ -86,6 +85,12 @@ [CascadingParameter] private Task? AuthenticationStateTask { get; set; } + [SupplyParameterFromQuery] + public string? Linked { get; set; } + + [SupplyParameterFromQuery(Name = "link_error")] + public string? LinkError { get; set; } + protected override async Task OnInitializedAsync() { if (AuthenticationStateTask is not null) @@ -99,6 +104,16 @@ } } + if (!string.IsNullOrWhiteSpace(Linked)) + { + successMessage = $"{Linked} аккаунт успешно привязан!"; + } + + if (!string.IsNullOrWhiteSpace(LinkError)) + { + errorMessage = $"Ошибка привязки: {Uri.UnescapeDataString(LinkError)}"; + } + await LoadIdentities(); } @@ -157,9 +172,4 @@ isUnlinking = false; } } - - private void LinkDiscord() - { - Navigation.NavigateTo("/auth/discord", forceLoad: true); - } }