private async Task <IActionResult> CriaUsuario(RegisterUsernameViewModel model) { var user = await userManager.FindByNameAsync(model.Login); if (user != null) { ModelState.AddModelError("Login", "Usuário já existe"); return(View(model)); } user = new ApplicationUser { UserName = model.Login }; var result = await userManager.CreateAsync(user, model.Senha); if (!result.Succeeded) { ModelState.AddModelError("", result.Errors.FirstOrDefault()?.Description ?? "Erro desconhecido ao criar Usuário"); return(View(model)); } result = await userManager.AddToRoleAsync(user, Constants.SyncRole); if (!result.Succeeded) { ModelState.AddModelError("", result.Errors.FirstOrDefault()?.Description ?? "Erro desconhecido ao adicionar ao Role"); return(View(model)); } return(RedirectToAction("Index", "Home")); }
public async Task <IActionResult> registerexternal(string returnUrl = null) { if (IsLoggedIn) { return(RedirectToAction(nameof(register))); } var externalLoginInfo = await _signInManager.GetExternalLoginInfoAsync(); if (externalLoginInfo == null) { _logger.LogDebug($"GetExternalLoginInfoAsync() returned null"); return(RedirectToAction(nameof(register))); } var usernameOnExternalSystem = externalLoginInfo.Principal?.FindFirst(System.Security.Claims.ClaimTypes.Name)?.Value ?? ""; var userFromProposedUsername = string.IsNullOrWhiteSpace(usernameOnExternalSystem) ? null : await _userManager.FindByNameAsync(usernameOnExternalSystem); var model = new RegisterUsernameViewModel { UserName = usernameOnExternalSystem }; if (userFromProposedUsername != null) { ModelState.AddModelError(String.Empty, USER_ALREADY_TAKEN_MESSAGE); } ViewData["ReturnUrl"] = returnUrl; ViewData[Constants.VIEWDATA_NOPRIVACYCONSENT] = true; ViewData[Constants.VIEWDATA_EXTERNALPROVIDERNAME] = externalLoginInfo.ProviderDisplayName; return(View(model)); }
public async Task <IActionResult> Cadastra(RegisterUsernameViewModel model) { if (ModelState.IsValid) { if (await CriaRole()) { return(await CriaUsuario(model)); } } return(View(model)); }
public async Task <IActionResult> registerexternal(RegisterUsernameViewModel model, string returnUrl = null) { if (model == null) { throw new ArgumentNullException(nameof(model)); } if (IsLoggedIn) { return(RedirectToAction(nameof(register))); } var externalLoginInfo = await _signInManager.GetExternalLoginInfoAsync(); if (externalLoginInfo == null) { _logger.LogDebug($"GetExternalLoginInfoAsync() returned null"); return(RedirectToAction(nameof(register))); } IdentityResult result = IdentityResult.Failed(); if (ModelState.IsValid) { // Check if username has been taken // TODO: Should just let CreateAsync return an error, not this if/then stuff _logger.LogDebug($"Model valid; calling FindByNameAsyc({model.UserName})"); var userFromProposedUsername = await _userManager.FindByNameAsync(model.UserName); if (userFromProposedUsername != null) { _logger.LogDebug($"Username {model.UserName} already exists; redisplay form"); result = IdentityResult.Failed(new IdentityError { Description = USER_ALREADY_TAKEN_MESSAGE }); } else { // Create the new user (without a password) and add the external login _logger.LogDebug($"Creating username {model.UserName}"); var newUser = new ApplicationUser { UserName = model.UserName }; result = await _userManager.CreateAsync(newUser); if (result.Succeeded) { _logger.LogDebug($"User created; adding login for external provider {externalLoginInfo.LoginProvider}({externalLoginInfo.ProviderDisplayName})"); result = await _userManager.AddLoginAsync(newUser, externalLoginInfo); } } } if (result.Succeeded) { // Actually log in as the user var signInresult = await _signInManager.ExternalLoginSignInAsync(externalLoginInfo.LoginProvider, externalLoginInfo.ProviderKey, isPersistent : false, bypassTwoFactor : true); if (signInresult.Succeeded) { _logger.LogDebug("Login succeeded; newly created login"); return(RedirectToLocal(returnUrl)); } else { _logger.LogWarning($"Login failed for new user {externalLoginInfo.LoginProvider} {externalLoginInfo.ProviderKey}"); return(RedirectToAction(nameof(login))); } } else { foreach (var error in result.Errors) { ModelState.AddModelError(String.Empty, error.Description); } } // If we got this far, something failed; redisplay form ViewData["ReturnUrl"] = returnUrl; ViewData[Constants.VIEWDATA_NOPRIVACYCONSENT] = true; return(View(model)); }