public async Task <VerificationResult> Post(string channel) { var user = await _userManager.GetUserAsync(HttpContext.User); if (!user.Verified) { return(await _verification.StartVerificationAsync(user.PhoneNumber, channel)); } return(new VerificationResult(new List <string> { "Your phone number is already verified" })); }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (ModelState.IsValid) { var user = new ApplicationUser { UserName = Input.UserName, PhoneNumber = Input.FullPhoneNumber, Verified = false }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { _logger.LogInformation("User created a new account with password."); var verification = await _verificationService.StartVerificationAsync(user.PhoneNumber, Input.Channel); if (verification.IsValid) { HttpContext.Session.SetString("_UserId", user.Id); await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, false, lockoutOnFailure : true); return(LocalRedirect(Url.Content($"~/Identity/Account/Verify/?returnUrl={returnUrl}"))); } await _userManager.DeleteAsync(user); foreach (var error in verification.Errors) { ModelState.AddModelError(string.Empty, error); } } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // If we got this far, something failed, redisplay form return(Page()); }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); InputLogin = new InputModelLogin(); InputRegister = new InputModelRegister(); // Username and password from phone number InputLogin.Username = InputModel.PhoneNumber; InputLogin.Password = InputModel.PhoneNumber; InputRegister.UserName = InputModel.PhoneNumber; InputRegister.Password = InputModel.PhoneNumber; InputRegister.FullPhoneNumber = InputModel.PhoneNumber; // try login if (ModelState.IsValid) { var result = await _signInManager.PasswordSignInAsync(InputLogin.Username, InputLogin.Password, false, lockoutOnFailure : true); if (result.Succeeded) { // try verify var user = new ApplicationUser { UserName = InputRegister.UserName, PhoneNumber = InputRegister.FullPhoneNumber, Verified = false }; var verification = await _verificationService.StartVerificationAsync(user.PhoneNumber, "sms"); if (verification.IsValid) { HttpContext.Session.SetString("_UserId", user.Id); await _signInManager.PasswordSignInAsync(InputRegister.UserName, InputRegister.Password, false, lockoutOnFailure : true); return(LocalRedirect(Url.Content($"~/Identity/Account/Verify/?phoneNumber={user.PhoneNumber}&returnUrl={returnUrl}"))); } await _userManager.DeleteAsync(user); foreach (var error in verification.Errors) { ModelState.AddModelError(string.Empty, error); } _logger.LogInformation("User logged in."); return(LocalRedirect(returnUrl)); } if (result.IsLockedOut) { _logger.LogWarning("User account locked out."); return(RedirectToPage("./Lockout")); } // try register var userRegister = new ApplicationUser { UserName = InputRegister.UserName, PhoneNumber = InputRegister.FullPhoneNumber, Verified = false }; var resultRegister = await _userManager.CreateAsync(userRegister, InputRegister.Password); if (resultRegister.Succeeded) { _logger.LogInformation("User created a new account with password."); var verification = await _verificationService.StartVerificationAsync(userRegister.PhoneNumber, "sms"); if (verification.IsValid) { HttpContext.Session.SetString("_UserId", userRegister.Id); await _signInManager.PasswordSignInAsync(InputRegister.UserName, InputRegister.Password, false, lockoutOnFailure : true); return(LocalRedirect(Url.Content($"~/Identity/Account/Verify/?phoneNumber={userRegister.PhoneNumber}&returnUrl={returnUrl}"))); } await _userManager.DeleteAsync(userRegister); foreach (var error in verification.Errors) { ModelState.AddModelError(string.Empty, error); } } foreach (var error in resultRegister.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // If we got this far, something failed, redisplay form return(Page()); }