@page "/account/login" @layout AuthLayout @attribute [AllowAnonymous] @using Microsoft.AspNetCore.Components.Forms @using NexusReader.UI.Shared.Services @using NexusReader.UI.Shared.Components.Atoms @inject IIdentityService IdentityService @inject NavigationManager NavigationManager @inject IJSRuntime JS

E-Czytnik AI

Zaloguj się do E-Czytnika AI

lub
@if (!string.IsNullOrEmpty(_errorMessage)) {
@_errorMessage
}
@code { [Parameter] [SupplyParameterFromQuery(Name = "error")] public string? ErrorCode { get; set; } private LoginModel _loginModel = new(); private string? _errorMessage; private bool _isSubmitting; private bool _showPassword; protected override void OnInitialized() { if (!string.IsNullOrEmpty(ErrorCode)) { _errorMessage = ErrorCode switch { "ExternalLoginFailed" => "Nie udało się zalogować przez Google. Spróbuj ponownie.", "ProvisioningFailed" => "Wystąpił błąd podczas przygotowywania Twojego konta.", "UserAlreadyExists" => "Użytkownik o tym adresie e-mail już istnieje. Zaloguj się tradycyjnie hasłem.", "LockedOut" => "Twoje konto zostało zablokowane. Spróbuj ponownie później.", "InvalidCredentials" => "Nieprawidłowy e-mail lub hasło.", _ => "Wystąpił nieoczekiwany błąd podczas logowania." }; } } private async Task HandleLogin() { _isSubmitting = true; _errorMessage = null; try { var result = await IdentityService.LoginAsync(_loginModel.Email, _loginModel.Password, _loginModel.RememberMe); if (result.IsSuccess) { // Trigger hidden form submission via robust JS helper to perform cookie-based sign-in await JS.InvokeVoidAsync("nexusAuth.submitLoginForm", "nexusLoginForm", _loginModel.Email, _loginModel.Password, _loginModel.RememberMe); } else { _errorMessage = result.Errors.FirstOrDefault()?.Message ?? "Nieprawidłowy e-mail lub hasło."; } } catch (Exception ex) { _errorMessage = $"Wystąpił błąd logowania: {ex.Message}."; } finally { _isSubmitting = false; } } private void HandleGoogleLogin() => NavigationManager.NavigateTo("identity/login/google", forceLoad: true); private void TogglePassword() => _showPassword = !_showPassword; public class LoginModel { [System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.EmailAddress] public string Email { get; set; } = string.Empty; [System.ComponentModel.DataAnnotations.Required] public string Password { get; set; } = string.Empty; public bool RememberMe { get; set; } } }