public async Task <ActionResult <UserDetail> > PostVerify2FACode(Verify2FACodeModel model) { if (ModelState.IsValid == false) { return(new ValidationErrorResult(ModelState)); } var user = await _signInManager.GetTwoFactorAuthenticationUserAsync(); if (user == null) { _logger.LogWarning("PostVerify2FACode :: No verified user found, returning 404"); return(NotFound()); } var result = await _signInManager.TwoFactorSignInAsync(model.Provider, model.Code, model.IsPersistent, model.RememberClient); if (result.Succeeded) { return(GetUserDetail(_userService.GetByUsername(user.UserName))); } if (result.IsLockedOut) { return(new ValidationErrorResult("User is locked out")); } if (result.IsNotAllowed) { return(new ValidationErrorResult("User is not allowed")); } return(new ValidationErrorResult("Invalid code")); }
public async Task <HttpResponseMessage> PostVerify2FACode(Verify2FACodeModel model) { if (ModelState.IsValid == false) { return(Request.CreateValidationErrorResponse(ModelState)); } var userName = await SignInManager.GetVerifiedUserNameAsync(); if (userName == null) { Logger.Warn <AuthenticationController>("Get2FAProviders :: No verified user found, returning 404"); throw new HttpResponseException(HttpStatusCode.NotFound); } var result = await SignInManager.TwoFactorSignInAsync(model.Provider, model.Code, isPersistent : true, rememberBrowser : false); switch (result) { case SignInStatus.Success: //get the user var user = Security.GetBackOfficeUser(userName); return(SetPrincipalAndReturnUserDetail(user)); case SignInStatus.LockedOut: return(Request.CreateValidationErrorResponse("User is locked out")); case SignInStatus.Failure: default: return(Request.CreateValidationErrorResponse("Invalid code")); } }
public async Task <IActionResult> Verify2FACode(Verify2FACodeModel model, string?returnUrl = null) { MemberIdentityUser?user = await _memberSignInManager.GetTwoFactorAuthenticationUserAsync(); if (user == null !) { _logger.LogWarning("PostVerify2FACode :: No verified member found, returning 404"); return(NotFound()); } if (ModelState.IsValid) { SignInResult result = await _memberSignInManager.TwoFactorSignInAsync( model.Provider, model.Code, model.IsPersistent, model.RememberClient); if (result.Succeeded && returnUrl is not null) { return(RedirectToLocal(returnUrl)); } if (result.IsLockedOut) { ModelState.AddModelError(nameof(Verify2FACodeModel.Code), "Member is locked out"); } else if (result.IsNotAllowed) { ModelState.AddModelError(nameof(Verify2FACodeModel.Code), "Member is not allowed"); } else { ModelState.AddModelError(nameof(Verify2FACodeModel.Code), "Invalid code"); } } // We need to set this, to ensure we show the 2fa login page IEnumerable <string> providerNames = await _twoFactorLoginService.GetEnabledTwoFactorProviderNamesAsync(user.Key); ViewData.SetTwoFactorProviderNames(providerNames); return(CurrentUmbracoPage()); }