OnProfNext/OnProfNext.Client/Pages/Login.razor
2025-10-14 12:57:40 +02:00

57 lines
1.4 KiB
Plaintext

@page "/login"
@using OnProfNext.Shared.Models
@inject HttpClient Http
@inject NavigationManager Nav
@inject IJSRuntime JS
<h3>Anmeldung</h3>
@if (error is not null)
{
<div class="alert alert-danger">@error</div>
}
<EditForm Model="login" OnValidSubmit="HandleLogin">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="mb-3">
<label>Benutzername</label>
<InputText class="form-control" @bind-Value="login.Username" />
</div>
<div class="mb-3">
<label>Passwort</label>
<InputText type="password" class="form-control" @bind-Value="login.Password" />
</div>
<button type="submit" class="btn btn-primary w-100">Login</button>
</EditForm>
@code {
private LoginRequest login = new();
private string? error;
private async Task HandleLogin()
{
try
{
var response = await Http.PostAsJsonAsync("api/auth/login", login);
if (!response.IsSuccessStatusCode)
{
error = "Anmeldung fehlgeschlagen.";
return;
}
var result = await response.Content.ReadFromJsonAsync<LoginResponse>();
await JS.InvokeVoidAsync("localStorage.setItem", "authToken", result!.Token);
Nav.NavigateTo("/users");
}
catch
{
error = "Server nicht erreichbar.";
}
}
}