SharpRSS/SharpRSS.Blazor/Components/Pages/Application/Login.razor
2024-11-02 01:58:30 +01:00

56 lines
2.0 KiB
Plaintext

@page "/Auth/Login"
@using DotBased.ASP.Auth.Domains
@using DotBased.ASP.Auth.Services
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@using SharpRSS.Blazor.Extensions
@using SharpRSS.Data.Domains.Auth
@inject ProtectedLocalStorage LocalStorage
@inject NavigationManager NavigationManager
@inject SecurityService SecurityService
@inject ISnackbar Snackbar
<PageTitle>Login | SharpRSS</PageTitle>
<EditForm Model="@model" OnValidSubmit="ValidSubmit">
<DataAnnotationsValidator/>
<MudGrid>
<MudItem>
<MudCard>
<MudCardContent>
<MudTextField Label="UserName" @bind-Value="model.UserName" For="@(() => model.UserName)"/>
<MudTextField Label="Password" @bind-Value="model.Password" For="@(() => model.Password)" InputType="InputType.Password"/>
</MudCardContent>
<MudCardActions>
<MudButton ButtonType="ButtonType.Submit" Variant="Variant.Filled" Color="Color.Primary">Login</MudButton>
</MudCardActions>
</MudCard>
</MudItem>
</MudGrid>
</EditForm>
@code {
private string RedirectAfterLogin { get; set; } = string.Empty;
LoginModel model = new();
protected override Task OnInitializedAsync()
{
RedirectAfterLogin = NavigationManager.GetQueryParameters().TryGetValue("RedirectUrl", out var redirectUrl) ? redirectUrl.ToString() : "/";
//TODO: Checking based auth or external (OIDC, etc.)
return base.OnInitializedAsync();
}
private async void ValidSubmit(EditContext obj)
{
var loginResult = await SecurityService.LoginAsync(model);
if (loginResult.Success && loginResult.Value != null)
{
await LocalStorage.SetAsync("dotbased_session", loginResult.Value.Id);
NavigationManager.NavigateTo(RedirectAfterLogin);
}
Snackbar.Add(loginResult.Message, Severity.Error);
}
}