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

@ -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);
}
}