Add registration form first iteration

This commit is contained in:
2025-10-07 12:45:02 +09:00
parent bddd99371b
commit 96172029d4
5 changed files with 95 additions and 9 deletions

View File

@ -16,9 +16,9 @@
<RadzenSidebar @bind-Expanded="@sidebarExpanded">
<RadzenStack Style="height: 100%" JustifyContent="JustifyContent.SpaceBetween">
<RadzenPanelMenu>
<RadzenPanelMenuItem Click="@(() => NavigationManager.NavigateTo("/"))" Text="Главная" Icon="home" />
<RadzenPanelMenuItem Path="/" Text="Главная" Icon="home" />
<RadzenPanelMenuItem Text="Тестирование" Icon="simulation">
<RadzenPanelMenuItem Click="@(() => NavigationManager.NavigateTo("/test/export"))" Text="Экспорт" Icon="arrow_outward" />
<RadzenPanelMenuItem Path="/test/export" Text="Экспорт" Icon="arrow_outward" />
</RadzenPanelMenuItem>
</RadzenPanelMenu>
<RadzenPanelMenu>
@ -32,8 +32,8 @@
</form>
</Authorized>
<NotAuthorized>
<RadzenPanelMenuItem Click="@(() => NavigationManager.NavigateTo("/account/register"))" Text="Регистрация" Icon="person_add" />
<RadzenPanelMenuItem Click="@(() => NavigationManager.NavigateTo("/account/login"))" Text="Вход" Icon="login" />
<RadzenPanelMenuItem Path="/account/register" Text="Регистрация" Icon="person_add" />
<RadzenPanelMenuItem Path="/account/login" Text="Вход" Icon="login" />
</NotAuthorized>
</AuthorizeView>
</RadzenPanelMenu>
@ -41,7 +41,6 @@
</RadzenSidebar>
<RadzenBody>
@Body
<div id="blazor-error-ui">
Произошла непредвиденная ошибка
<a href="" class="reload">Перезагрузить</a>

View File

@ -0,0 +1,90 @@
@page "/account/register"
@using Microsoft.AspNetCore.Identity
@using Hcs.WebApp.Data
@using Hcs.WebApp.Identity
@inject IUserStore<AppUser> UserStore
@inject UserManager<AppUser> UserManager
@inject NotificationService NotificationService
@inject SignInManager<AppUser> SignInManager
@inject IdentityRedirectManager RedirectManager
<PageTitle>Регистрация аккаунта</PageTitle>
<RadzenCard class="rz-mx-auto" Style="max-width: 420px">
<RadzenTemplateForm TItem="InputModel" Data=@Input Method="post" Submit=@OnSubmit>
<RadzenStack Gap="1rem" class="rz-p-sm-12">
<RadzenText TextStyle="TextStyle.H4" TextAlign="TextAlign.Center">Регистрация</RadzenText>
<RadzenFormField Text="Логин" Variant="Variant.Outlined">
<ChildContent>
<RadzenTextBox Name="UserName" @bind-Value=@Input.UserName AutoCompleteType="AutoCompleteType.Username" />
</ChildContent>
<Helper>
<RadzenRequiredValidator Component="UserName" Text="Поле 'Логин' обязательно к заполнению" />
<RadzenLengthValidator Component="UserName" Min="6" Text="Длина поля 'Логин' должна быть не меньше 6" />
<RadzenLengthValidator Component="UserName" Max="30" Text="Длина поля 'Логин' должна быть не больше 30" />
</Helper>
</RadzenFormField>
<RadzenFormField Text="Пароль" Variant="Variant.Outlined">
<ChildContent>
<RadzenPassword Name="Password" @bind-Value=@Input.Password AutoCompleteType="AutoCompleteType.NewPassword" />
</ChildContent>
<Helper>
<RadzenRequiredValidator Component="Password" Text="Поле 'Пароль' обязательно к заполнению" />
<RadzenLengthValidator Component="Password" Min="6" Text="Длина поля 'Пароль' должна быть не меньше 6" />
<RadzenLengthValidator Component="Password" Max="100" Text="Длина поля 'Пароль' должна быть не больше 100" />
</Helper>
</RadzenFormField>
<RadzenFormField Text="Повторите пароль" Variant="Variant.Outlined">
<ChildContent>
<RadzenPassword Name="ConfirmPassword" @bind-Value=@Input.ConfirmPassword AutoCompleteType="AutoCompleteType.NewPassword" />
</ChildContent>
<Helper>
<RadzenRequiredValidator Component="ConfirmPassword" Text="Поле 'Пароль' обязательно к заполнению" />
<RadzenCompareValidator Visible=@(!string.IsNullOrEmpty(Input.ConfirmPassword)) Value=@Input.Password Component="ConfirmPassword" Text="Пароли должны совпадать" />
</Helper>
</RadzenFormField>
<RadzenButton ButtonType="ButtonType.Submit" Text="Зарегистрировать"></RadzenButton>
</RadzenStack>
</RadzenTemplateForm>
</RadzenCard>
@code {
sealed class InputModel
{
public string UserName { get; set; } = "";
public string Password { get; set; } = "";
public string ConfirmPassword { get; set; } = "";
}
[SupplyParameterFromForm]
InputModel Input { get; set; } = new();
[SupplyParameterFromQuery]
string? ReturnUrl { get; set; }
async Task OnSubmit(InputModel mode)
{
var user = Activator.CreateInstance<AppUser>();
await UserStore.SetUserNameAsync(user, Input.UserName, CancellationToken.None);
var result = await UserManager.CreateAsync(user, Input.Password);
if (!result.Succeeded)
{
NotificationService.Notify(new NotificationMessage()
{
Severity = NotificationSeverity.Error,
Summary = "Ошибка",
Detail = string.Join(", ", result.Errors.Select(error => error.Description))
});
return;
}
await SignInManager.SignInAsync(user, isPersistent: false);
RedirectManager.RedirectTo(ReturnUrl);
}
}

View File

@ -5,7 +5,6 @@
<PageTitle>Ошибка</PageTitle>
<h2 class="text-danger">При выполнении запроса возникла ошибка</h2>
@if (ShowRequestId)
{
<p>

View File

@ -5,7 +5,6 @@
@using Hcs.Broker.Logger
@using Hcs.Broker.MessageCapturer
@using Hcs.Service.Async.Nsi
@using Hcs.WebApp.Components.Shared
@using Hcs.WebApp.Config
@using Hcs.WebApp.Utils

View File

@ -1,5 +1,4 @@
@using Radzen
@using System.Text.Json
@using System.Text.Json
@using System.Diagnostics.CodeAnalysis
@inject IJSRuntime JSRuntime