@page "/register" @using HopFrame.Security.Services @using HopFrame.Web.Model @using HopFrame.Web.Services @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @implements IDisposable Register
@**@

Register

The password needs to be at least 8 characters long
Already have an account? Login
@inject NavigationManager Navigator @inject IUserService Users @inject IAuthService Auth @code { public static string RedirectAfterRegister { get; set; } = "/"; [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); Navigator.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; } }