public async Task <LoginResponseModel> ResetPassword(ResetPasswordWithPhoneRequestModel model) { var user = _unitOfWork.Repository <ApplicationUser>().Get(x => x.PhoneNumber == model.PhoneNumber) .Include(x => x.VerificationTokens) .FirstOrDefault(); if (user == null || !user.PhoneNumberConfirmed) { throw new CustomException(HttpStatusCode.BadRequest, "phoneNumber", "Phone Number is invalid"); } var code = user.VerificationTokens.FirstOrDefault(x => !x.IsUsed && x.IsValid && x.TokenHash == _hashUtility.GetHash(model.Code)); if (code == null) { throw new CustomException(HttpStatusCode.BadRequest, "code", "Invalid code"); } await _userManager.ResetPasswordAsync(user, await _userManager.GeneratePasswordResetTokenAsync(user), model.Password); code.IsUsed = true; _unitOfWork.Repository <ApplicationUser>().Update(user); // there is _unitOfWork.SaveChanges call inside BuildLoginResponse var loginResponse = await _jwtService.BuildLoginResponse(user); return(loginResponse); }
public async Task <IActionResult> ResetPassword([FromBody] ResetPasswordWithPhoneRequestModel model) { var response = await _accountService.ResetPassword(model); return(Json(new JsonResponse <LoginResponseModel>(response))); }