OnProfNext/OnProfNext.Client/Pages/Login.razor
2025-10-15 13:29:50 +02:00

64 lines
1.6 KiB
Plaintext

@page "/login"
@using OnProfNext.Client.Services
@using OnProfNext.Shared.Models
@inject HttpClient Http
@inject NavigationManager Nav
@inject IJSRuntime JS
@inject AuthService AuthService
<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>
<div class="text-center mt-3">
<span>Noch keinen Account? </span>
<a href="/createuser" class="link-primary text-decoration-none">Registrieren</a>
</div>
</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 AuthService.LoginAsync(result!.Token);
Nav.NavigateTo("/");
}
catch
{
error = "Server nicht erreichbar.";
}
}
}