@page "/login"
@rendermode InteractiveWebAssembly
@attribute [AllowAnonymous]
@inject IAuthService AuthService
@inject NavigationManager Nav
Anmelden – Timetracker
@* ── Logo / Header ── *@
Timetracker
@* ── Tab Navigation ── *@
Anmelden
Registrieren
@if (_activeTab == 0)
{
@* ── Login Form ── *@
@if (_error != null)
{
@_error
}
@if (_loading)
{
}
Anmelden
}
else
{
@* ── Register Form ── *@
@if (_error != null)
{
@_error
}
Ich akzeptiere die AGB.
@if (_loading)
{
}
Konto erstellen
}
@code {
private int _activeTab = 0;
private string? _error;
private bool _loading;
private string _honeypot = "";
private bool _acceptAgb;
private readonly AuthModel _loginModel = new();
private readonly AuthModel _registerModel = new();
[SupplyParameterFromQuery(Name = "error")]
public string? ErrorParam { get; set; }
[SupplyParameterFromQuery(Name = "tab")]
public string? TabParam { get; set; }
protected override void OnParametersSet()
{
_error = ErrorParam switch
{
"invalid" => "Benutzername oder Passwort falsch.",
not null => Uri.UnescapeDataString(ErrorParam),
_ => null
};
_activeTab = TabParam == "register" ? 1 : 0;
}
private void SetTab(int tab)
{
_activeTab = tab;
_error = null;
}
private async Task HandleLogin()
{
_loading = true;
_error = null;
try
{
var user = await AuthService.LoginAsync(_loginModel.Username, _loginModel.Password);
if (user != null)
{
Nav.NavigateTo("/", forceLoad: true); // forceLoad forces state update/re-render of the root app
}
else
{
_error = "Benutzername oder Passwort falsch.";
}
}
catch (Exception ex)
{
_error = $"Login Fehler: {ex.Message}";
}
finally
{
_loading = false;
}
}
private async Task HandleRegister()
{
if (!_acceptAgb)
{
_error = "Du musst die AGB akzeptieren.";
return;
}
_loading = true;
_error = null;
try
{
var (user, error) = await AuthService.RegisterAsync(_registerModel.Username, _registerModel.Password, _honeypot);
if (user != null)
{
Nav.NavigateTo("/", forceLoad: true);
}
else
{
_error = error ?? "Registrierung fehlgeschlagen.";
}
}
catch (Exception ex)
{
_error = $"Registrierungs Fehler: {ex.Message}";
}
finally
{
_loading = false;
}
}
private class AuthModel
{
public string Username { get; set; } = "";
public string Password { get; set; } = "";
}
}