@page "/register" @using HopFrame.Security.Services @using HopFrame.Web.Model @using HopFrame.Web.Services @using Microsoft.AspNetCore.Components.Forms @implements IDisposable
@**@
The password needs to be at least 8 characters long
@inject NavigationManager Navigation @inject IUserService Users @inject IAuthService Auth @code { public static string RedirectAfterRegister { get; set; } = "/"; private const string RefreshTokenType = "HopFrame.Security.RefreshToken"; [SupplyParameterFromForm] private RegisterData RegisterData { get; set; } private EditContext _context; private ValidationMessageStore _messages; protected override void OnInitialized() { RegisterData ??= new(); _context = new EditContext(RegisterData); _context.OnValidationRequested += ValidateForm; _messages = new ValidationMessageStore(_context); } private async Task OnRegister() { var hasConflict = false; if (await Users.GetUserByEmail(RegisterData.Email) is not null) { _messages.Add(() => RegisterData.Email, "Email is already in use"); hasConflict = true; } if (await Users.GetUserByUsername(RegisterData.Username) is not null) { _messages.Add(() => RegisterData.Username, "Username is already in use"); hasConflict = true; } if (hasConflict) return; await Auth.Register(RegisterData); Navigation.NavigateTo(RedirectAfterRegister, true); } private void ValidateForm(object sender, ValidationRequestedEventArgs e) { _messages.Clear(); if (RegisterData.Password != RegisterData.RepeatedPassword) { _messages.Add(() => RegisterData.RepeatedPassword, "Passwords doesn't mach"); } if (RegisterData.Password.Length < 8) { _messages.Add(() => RegisterData.Password, "Password needs to be at least 8 characters long"); } if (!RegisterData.Email.Contains("@") || !RegisterData.Email.Contains(".") || RegisterData.Email.EndsWith(".")) { _messages.Add(() => RegisterData.Email, "Please enter a valid email address"); } } public void Dispose() { _context.OnValidationRequested -= ValidateForm; } }