public UserCredential RegisterUser(RegistrationUserIdentityDto newCredentials, string password) { if (string.IsNullOrWhiteSpace(password)) { throw new AppException("Password is required"); } if (db.UserCredentials.IsEmailReserved(newCredentials.Email)) { throw new AppException($"Username \\ {newCredentials.Email} \\ is already taken"); } int existingUserId; CreatePasswordHash(password, out var passwordHash, out var passwordSalt); if (db.Users.GetUserByPhoneNumber(newCredentials.PhoneNumber) != null) { existingUserId = db.Users.GetUserByPhoneNumber(newCredentials.PhoneNumber).Id; } else { var user = new User { FirstName = newCredentials.FirstName, LastName = newCredentials.LastName, PhoneNumber = newCredentials.PhoneNumber }; db.Users.AddEntity(user); db.Save(); existingUserId = user.Id; } var formedCredentials = new UserCredential { Email = newCredentials.Email, UserId = existingUserId, PasswordHash = passwordHash, PasswordSalt = passwordSalt }; db.UserCredentials.AddEntity(formedCredentials); db.Save(); return(formedCredentials); }
public IActionResult Register([FromBody] RegistrationUserIdentityDto registrationCredentialsDto) { try { // save var registeredUser = _authenticationService.RegisterUser(registrationCredentialsDto, registrationCredentialsDto.Password); var registeredCredentials = _authenticationService.Authenticate(registrationCredentialsDto.Email, registrationCredentialsDto.Password); var now = DateTime.UtcNow; // creating JWT-token var jwt = new JwtSecurityToken( issuer: AuthOptions.ISSUER, audience: AuthOptions.AUDIENCE, notBefore: now, claims: registeredCredentials.Claims, expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)), signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256)); var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt); var response = new { accessToken = encodedJwt, tokenLifeTime = 3600000, userId = registeredUser.UserId }; _authenticatedHubContext.Clients.All.UserRegistered(registeredUser.UserId); return(Ok(response)); } catch (AppException ex) { // return error message if there was an exception return(BadRequest(new { message = ex.Message })); } }