public async Task <UserLoginReturnModel> Login(UserLoginModel userLoginModel) { var user = await _userManager.FindByEmailAsync(userLoginModel.Email.ToLower()); var userToReturn = new UserLoginReturnModel() { Succeeded = false, Errors = new Dictionary <string, List <string> >() }; //Error message for invalid username or password var list = new List <string>() { "Invalid username or password" }; //User not found by email if (user == null) { userToReturn.Errors.Add("Error", list); return(userToReturn); } //If user exists, check password var result = await _signInManager.CheckPasswordSignInAsync(user, userLoginModel.Password, false); if (!result.Succeeded) { //Wrong password, return error userToReturn.Errors.Add("Error", list); return(userToReturn); } //If OK sign in user var appUser = await _userManager.Users.FirstOrDefaultAsync(u => u.Email == userLoginModel.Email.ToLower()); userToReturn = _mapper.Map <UserLoginReturnModel>(appUser); var roles = await _userManager.GetRolesAsync(appUser); userToReturn.Succeeded = true; userToReturn.Token = _tokenGeneration.GenerateJwtToken(appUser); userToReturn.Role = roles.Contains("Applicant") ? 0 : 1; return(userToReturn); }
public async Task <UserLoginReturnModel> Login(UserLoginModel userLoginModel) { var user = await _userManager.FindByEmailAsync(userLoginModel.Email.ToLower()); var userToReturn = new UserLoginReturnModel(); //User not found by email if (user == null) { userToReturn.Errors["Error"].Add("Invalid email or password"); return(userToReturn); } //If user exists, check password var result = await _signInManager.CheckPasswordSignInAsync(user, userLoginModel.Password, false); if (!result.Succeeded) { //Wrong password, return error userToReturn.Errors["Error"].Add("Invalid email or password."); return(userToReturn); } //If OK generate token userToReturn = _mapper.Map <UserLoginReturnModel>(user); var roles = await _userManager.GetRolesAsync(user); //Check if it is first-time login if (user.ModifiedDate != null) { userToReturn.NewUser = false; } else { userToReturn.NewUser = true; } userToReturn.Succeeded = true; userToReturn.Token = await _tokenGeneration.GenerateJwtToken(user); userToReturn.Role = roles.Contains(RoleConstants.APPLICANT) ? (int)UserType.APPLICANT : roles.Contains(RoleConstants.CLIENT) ? (int)UserType.CLIENT : (int)UserType.ADMIN; return(userToReturn); }