public async Task <IActionResult> Register([FromBody] DTO.App.Register dto) { var appUser = await _userManager.FindByEmailAsync(dto.Email); if (appUser != null) { _logger.LogWarning(" User {User} already registered", dto.Email); return(BadRequest(new DTO.App.Message("User already registered"))); } appUser = new Domain.App.Identity.AppUser() { Email = dto.Email, UserName = dto.Email, Firstname = dto.Firstname, Lastname = dto.Lastname, }; var result = await _userManager.CreateAsync(appUser, dto.Password); if (result.Succeeded) { _logger.LogInformation("User {Email} created a new account with password", appUser.Email); var user = await _userManager.FindByEmailAsync(appUser.Email); if (user != null) { var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(user); var jwt = Extensions.Base.IdentityExtensions.GenerateJwt( claimsPrincipal.Claims, _configuration["JWT:Key"], _configuration["JWT:Issuer"], _configuration["JWT:Issuer"], DateTime.Now.AddDays(_configuration.GetValue <int>("JWT:ExpireDays")) ); _logger.LogInformation("WebApi login. User {User}", dto.Email); return(Ok(new DTO.App.JwtResponse() { Token = jwt, Firstname = appUser.Firstname, Lastname = appUser.Lastname, })); } else { _logger.LogInformation("User {Email} not found after creation", appUser.Email); return(BadRequest(new DTO.App.Message("User not found after creation!"))); } } var errors = result.Errors.Select(error => error.Description).ToList(); return(BadRequest(new DTO.App.Message() { Messages = errors })); }
public async Task <IActionResult> 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 Domain.App.Identity.AppUser() { Email = dto.Email, UserName = dto.Email, FirstName = dto.FirstName, LastName = dto.LastName, }; var result = await _userManager.CreateAsync(appUser, dto.Password); if (result.Succeeded) { _logger.LogInformation($"User {appUser.Email} created a new account with password."); 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!"))); } // Log new user in return(await LogIn(newRegisteredUser)); }
private async Task <IActionResult> LogUserIn(DomainIdentity.AppUser appUser) { var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(appUser); // get the User analog 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($"Web-Api login. Token generated for user {appUser.Email}"); return(Ok(new JwtResponseDTO() { Token = jwt, Status = $"User {appUser.Email} logged in.", Id = appUser.Id, FirstName = appUser.FirstName, LastName = appUser.LastName })); }
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)); }