fix: refresh mini app login state
Deploy Telegram Bot / build-and-push (push) Successful in 4m23s
Deploy Telegram Bot / deploy (push) Successful in 12s

This commit is contained in:
2026-04-28 17:03:53 +03:00
parent 41f2ea6e90
commit 8220f2060f
10 changed files with 102 additions and 15 deletions
+71 -7
View File
@@ -24,12 +24,30 @@
<ReconnectModal />
<script src="@Assets["_framework/blazor.web.js"]"></script>
<script>
(function () {
if (window.Telegram && window.Telegram.WebApp && window.Telegram.WebApp.initData) {
var webApp = window.Telegram.WebApp;
document.body.classList.add('telegram-mini-app');
webApp.ready();
window.waitForTelegramMiniAppInitData = async function (timeoutMs) {
var deadline = Date.now() + (timeoutMs || 3000);
while (Date.now() <= deadline) {
if (window.Telegram && window.Telegram.WebApp && window.Telegram.WebApp.initData) {
return window.Telegram.WebApp;
}
await new Promise(function (resolve) {
setTimeout(resolve, 100);
});
}
return null;
};
(async function () {
var webApp = await window.waitForTelegramMiniAppInitData(1000);
if (!webApp) {
return;
}
document.body.classList.add('telegram-mini-app');
webApp.ready();
})();
window.loadTelegramWidget = function (botUsername, authUrl) {
@@ -46,12 +64,58 @@
container.appendChild(script);
};
window.watchTelegramMiniAppLogin = function (statusUrl, redirectUrl) {
if (window.gmRelayMiniAppLoginWatcher) {
return;
}
var stopWatching = function () {
if (window.gmRelayMiniAppLoginWatcher) {
window.clearInterval(window.gmRelayMiniAppLoginWatcher);
window.gmRelayMiniAppLoginWatcher = null;
}
};
var checkLogin = async function () {
try {
var response = await fetch(statusUrl, {
credentials: 'same-origin',
cache: 'no-store'
});
if (!response.ok) {
return;
}
var payload = await response.json();
if (payload.authenticated) {
stopWatching();
window.location.href = redirectUrl || '/';
}
} catch (error) {
return;
}
};
window.gmRelayMiniAppLoginWatcher = window.setInterval(checkLogin, 1000);
window.addEventListener('focus', function () {
void checkLogin();
});
document.addEventListener('visibilitychange', function () {
if (!document.hidden) {
void checkLogin();
}
});
void checkLogin();
};
window.authenticateTelegramMiniApp = async function (authUrl, redirectUrl) {
if (!window.Telegram || !window.Telegram.WebApp || !window.Telegram.WebApp.initData) {
var webApp = await window.waitForTelegramMiniAppInitData(3000);
if (!webApp) {
return false;
}
var webApp = window.Telegram.WebApp;
document.body.classList.add('telegram-mini-app');
webApp.ready();
webApp.expand();
@@ -56,7 +56,7 @@
</button>
</form>
<div class="nav-version">v1.9.0</div>
<div class="nav-version">v1.9.1</div>
</div>
</Authorized>
<NotAuthorized>
@@ -58,6 +58,7 @@
statusMessage = "Mini App доступен из Telegram. Для браузера используйте обычный вход.";
showFallback = true;
StateHasChanged();
await TryWatchLoginAsync();
}
}
catch (JSException)
@@ -65,6 +66,18 @@
statusMessage = "Не удалось получить данные Telegram Mini App. Попробуйте открыть dashboard из бота.";
showFallback = true;
StateHasChanged();
await TryWatchLoginAsync();
}
}
private async Task TryWatchLoginAsync()
{
try
{
await JS.InvokeVoidAsync("watchTelegramMiniAppLogin", "/auth/status", "/");
}
catch (JSException)
{
}
}
}
+3
View File
@@ -117,6 +117,9 @@ app.MapPost("/auth/telegram-webapp", async (
return Results.Ok(new { redirectUrl = "/" });
}).DisableAntiforgery();
app.MapGet("/auth/status", (HttpContext context) =>
Results.Ok(new { authenticated = context.User.Identity?.IsAuthenticated == true }));
app.MapPost("/auth/logout", async (HttpContext context) =>
{
await context.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
+1 -1
View File
@@ -1,5 +1,5 @@
/* ============================================
GM-Relay Design System v1.9.0
GM-Relay Design System v1.9.1
Dark RPG Dashboard Theme
============================================ */