private async Task <AuthResponse> TryCreateUser(SignUpModel signUpModel, string errorMessage) { var response = default(AuthResponse); var appUserProfile = new AppUserProfile(signUpModel.FirstName, signUpModel.LastName, signUpModel.MarriageStatus, signUpModel.Gender, signUpModel.DateOfBirth); var user = new AppUser(signUpModel.DisplayName, signUpModel.UserName, signUpModel.WorkerId, appUserProfile); var result = await userManager.CreateAsync(user, signUpModel.Password); appUserProfile.AppUserId = user.Id; context.Entry(appUserProfile).State = EntityState.Modified; context.SaveChanges(); if (!result.Succeeded) { response = AuthResponseError.FromIdentityErrors(result.Errors, errorMessage); } else { result = await userManager.AddToRoleAsync(user, AuthRoles.User); if (!result.Succeeded) { response = AuthResponseError.FromIdentityErrors(result.Errors, errorMessage); } else { response = new AuthResponseOk("Sign up success. Sign in with your credentials"); } } return(response); }
public async Task <AuthResponse> SignIn(SignInModel signInModel, ModelStateDictionary modelState) { var response = default(AuthResponse); var errorMessage = "Sign in error"; if (!modelState.IsValid) { response = AuthResponseError.FromModelStateErrors(modelState, errorMessage); } else { var user = await userManager.FindByEmailAsync(signInModel.UserName); var errors = default(IEnumerable <string>); if (user == null) { errors = GetErrorsFromParams($"User {signInModel.UserName} was not found"); response = AuthResponseError.GetNotFoundError(errors, errorMessage); } else { var result = await signInManager.PasswordSignInAsync(user, signInModel.Password, false, false); if (!result.Succeeded) { errors = GetErrorsFromParams($"Incorrect password"); response = AuthResponseError.GetBadRequestError(errors, errorMessage); } else { var token = await generateJwt.CreateToken(user); var authModel = await AuthModel.FromAppUser(user, userManager, token); response = new AuthResponseOk(authModel, "Sign in success"); } } } return(response); }
public async Task <AuthResponse> SignOut(SignOutModel signOutModel) { var response = default(AuthResponse); var userId = signOutModel.Id; var user = await userManager.FindByIdAsync(userId); if (user == null) { var errors = GetErrorsFromParams("User was not found"); response = AuthResponseError.GetNotFoundError(errors, "Sign out has failed"); } else { await signInManager.SignOutAsync(); response = new AuthResponseOk("Sign out success"); } return(response); }