public async Task <ActionResult <string> > Register([FromBody] RegisterDTO model) { if (ModelState.IsValid) { var appUser = new AppUser { UserName = model.Email, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, Address = model.Address }; var result = await _userManager.CreateAsync(appUser, model.Password); if (result.Succeeded) { _logger.LogInformation("New user created."); // create claims based user var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(appUser); // get the Json Web Token var jwt = IdentityExtensions.GenerateJWT(claimsPrincipal.Claims, _configuration["JWT:SigningKey"], _configuration["JWT:Issuer"], _configuration.GetValue <int>("JWT:ExpirationInDays") ); await _bll.SaveChangesAsync(); _logger.LogInformation("Token generated for user"); return(Ok(new { token = jwt, status = "Account created for " + model.Email, email = model.Email })); } return(StatusCode(406)); //406 Not Acceptable } return(StatusCode(400)); //400 Bad Request }
public async Task <ActionResult <string> > Register([FromBody] RegisterDTO dto) { var appUser = await _userManager.FindByEmailAsync(dto.Email); if (appUser != null) { _logger.LogInformation($"WebApi register. User {dto.Email} already registered!"); return(NotFound(new MessageDTO("User already registered!"))); } appUser = new AppUser() { Email = dto.Email, UserName = dto.Email, FirstName = dto.FirstName, LastName = dto.LastName, }; var role = dto.IsHost ? "host" : "guest"; if (!await _roleManager.RoleExistsAsync(role)) { await _roleManager.CreateAsync(new AppRole() { Name = role }); } var result = await _userManager.CreateAsync(appUser, dto.Password); if (result.Succeeded) { _logger.LogInformation($"User {appUser.Email} created a new account as {role}."); await _userManager.AddToRoleAsync(appUser, role); var user = await _userManager.FindByEmailAsync(appUser.Email); if (user != null) { var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(user); var jwt = IdentityExtensions.GenerateJWT( claimsPrincipal.Claims .Append(new Claim(ClaimTypes.GivenName, appUser.FirstName)) .Append(new Claim(ClaimTypes.Surname, appUser.LastName)), _configuration["JWT:SigningKey"], _configuration["JWT:Issuer"], _configuration.GetValue <int>("JWT:ExpirationInDays") ); _logger.LogInformation($"WebApi register. User {user.Email} logged in."); return(Ok(new JwtResponseDTO() { Token = jwt, Status = $"User {user.Email} created and logged in.", FirstName = appUser.FirstName, LastName = appUser.LastName })); } _logger.LogInformation($"User {appUser.Email} not found after creation!"); return(BadRequest(new MessageDTO("User not found after creation!"))); } var errors = result.Errors.Select(error => error.Description).ToList(); return(BadRequest(new MessageDTO() { Messages = errors })); }
public async Task <IActionResult> Register([FromBody] RegisterDTO registerDTO) { // User already exists var existingUser = await _userManager.FindByEmailAsync(registerDTO.Email); if (existingUser != null) { _logger.LogInformation($"WebApi register. User {registerDTO.Email} already registered!"); return(BadRequest(new MessageDTO("User already registered!"))); } // Create new user var newUser = new DomainIdentity.AppUser { Email = registerDTO.Email, UserName = registerDTO.Email.ToLower().Split('@')[0], FirstName = registerDTO.FirstName, LastName = registerDTO.LastName }; var result = await _userManager.CreateAsync(newUser, registerDTO.Password); // Check creation if (!result.Succeeded) { _logger.LogInformation($"Web-Api register. Could not register user {registerDTO.Email}!"); var errors = result.Errors.Select(error => error.Description).ToList(); return(BadRequest(new MessageDTO() { Messages = errors })); } _logger.LogInformation($"Web-Api register. User {registerDTO.Email} registered!"); // Find newly created user var newRegisteredUser = await _userManager.FindByEmailAsync(newUser.Email); if (newRegisteredUser == null) { _logger.LogInformation($"User {newUser.Email} not found after creation!"); return(NotFound(new MessageDTO("User not found after creation!"))); } // Create default profile with an empty wishlist try { _bll.Profiles.CreateDefaultProfile(newRegisteredUser.Id); await _bll.SaveChangesAsync(); } catch (ArgumentNullException e) { _logger.LogError($"Could not create default profile for new registered user {registerDTO.Email} - userId not provided", e); } // Check if user was invited by existing user var invitedUsers = (await _bll.InvitedUsers.GetAllAsync()) .Where(i => i.Email == newRegisteredUser.Email) .ToList(); if (invitedUsers != null && invitedUsers.Any()) { foreach (var invitedUser in invitedUsers) { // Update invitedUser to mark they have joined invitedUser.HasJoined = true; await _bll.InvitedUsers.UpdateAsync(invitedUser); await _bll.SaveChangesAsync(); // Send notification to the invitor about their friend joining var invitor = await _userManager.FindByIdAsync(invitedUser.InvitorUserId.ToString()); // TODO } } // Save user activity newRegisteredUser.LastActive = DateTime.Now; await _userManager.UpdateAsync(newRegisteredUser); await _bll.SaveChangesAsync(); // Log new user in return(await LogUserIn(newRegisteredUser)); }