/// <summary> /// Sends the given user a new verify email link /// </summary> /// <param name="user">The user to send the link to</param> /// <returns></returns> private async Task SendUserEmailVerificationAsync(ApplicationUser user) { // Get the user details var userIdentity = await mUserManager.FindByNameAsync(user.UserName); // Generate an email verification code var emailVerificationCode = await mUserManager.GenerateEmailConfirmationTokenAsync(user); // TODO: Replace with APIRoutes that will contain the static routes to use var confirmationUrl = $"http://{Request.Host.Value}/api/verify/email/{HttpUtility.UrlEncode(userIdentity.Id)}/{HttpUtility.UrlEncode(emailVerificationCode)}"; // Email the user the verification code await FasettoEmailSender.SendUserVerificationEmailAsync(user.UserName, userIdentity.Email, confirmationUrl); }
public async Task <ApiResponse <RegisterResultApiModel> > RegisterAsync([FromBody] RegisterCredentialsApiModel registerCredentials) { // TODO: Localize all strings // The message when we fail to login var invalidErrorMessage = "Please provide all required details to register for an account"; // The error response for a failed login var errorResponse = new ApiResponse <RegisterResultApiModel> { // Set error message ErrorMessage = invalidErrorMessage }; // If we have no credentials... if (registerCredentials == null) { // Return failed response return(errorResponse); } // Make sure we have a user name if (string.IsNullOrWhiteSpace(registerCredentials.Username)) { // Return error message to user return(errorResponse); } // Create the desired user from the given details var user = new ApplicationUser { UserName = registerCredentials.Username, FirstName = registerCredentials.FirstName, LastName = registerCredentials.LastName, Email = registerCredentials.Email }; // Try and create a user var result = await mUserManager.CreateAsync(user, registerCredentials.Password); // If the registration was successful... if (result.Succeeded) { // Get the user details var userIdentity = await mUserManager.FindByNameAsync(registerCredentials.Username); // Generate an email verification code var emailVerificationCode = await mUserManager.GenerateEmailConfirmationTokenAsync(user); // TODO: Replace with APIRoutes that will contain the static routes to use var confirmationUrl = $"http://{Request.Host.Value}/api/verify/email/{HttpUtility.UrlEncode(userIdentity.Id)}/{HttpUtility.UrlEncode(emailVerificationCode)}"; // Email the user the verification code await FasettoEmailSender.SendUserVerificationEmailAsync(user.UserName, userIdentity.Email, confirmationUrl); // Return valid response containing all users details return(new ApiResponse <RegisterResultApiModel> { Response = new RegisterResultApiModel { FirstName = userIdentity.FirstName, LastName = userIdentity.LastName, Email = userIdentity.Email, Username = userIdentity.UserName, Token = userIdentity.GenerateJwtToken() } }); } // Otherwise if it failed... else { // Return the failed response return new ApiResponse <RegisterResultApiModel> { // Aggregate all errors into a single error string ErrorMessage = result.Errors?.ToList() .Select(f => f.Description) .Aggregate((a, b) => $"{a}{Environment.NewLine}{b}") } }; }