Files
GmRelayBot/src/GmRelay.Web/Components/Pages/Login.razor
T
Toutsu 3002db6534
Deploy Telegram Bot / build-and-push (push) Successful in 3m17s
Deploy Telegram Bot / deploy (push) Successful in 9s
fix: загрузка Telegram Login Widget через JS interop для корректной работы с Blazor SPA-навигацией
2026-04-21 15:31:12 +03:00

53 lines
1.6 KiB
Plaintext

@page "/login"
@using Microsoft.AspNetCore.Components.Authorization
@inject NavigationManager Navigation
@inject IConfiguration Configuration
@inject IJSRuntime JS
<PageTitle>Вход — GM-Relay</PageTitle>
<div class="login-page">
<div class="login-card">
<div class="login-logo">🎲</div>
<h1 class="login-title">GM-Relay</h1>
<p class="login-subtitle">Войдите через Telegram для управления игровыми сессиями</p>
@if (Navigation.Uri.Contains("error=auth_failed"))
{
<div class="gm-alert gm-alert-danger" style="margin-bottom: 1.5rem; justify-content: center;">
⚠️ Ошибка аутентификации. Пожалуйста, попробуйте снова.
</div>
}
<div id="telegram-login-container"></div>
</div>
</div>
@code {
private string BotUsername => Configuration["Telegram:BotUsername"] ?? "GmRelayBot";
private string AuthUrl => Navigation.ToAbsoluteUri("/auth/telegram").ToString();
[CascadingParameter]
private Task<AuthenticationState>? AuthStateTask { get; set; }
protected override async Task OnInitializedAsync()
{
if (AuthStateTask is not null)
{
var user = (await AuthStateTask).User;
if (user.Identity?.IsAuthenticated == true)
{
Navigation.NavigateTo("/");
}
}
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await JS.InvokeVoidAsync("loadTelegramWidget", BotUsername, AuthUrl);
}
}
}