Beispiel #1
0
        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"));
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
 public async Task <IActionResult> Cadastra(RegisterUsernameViewModel model)
 {
     if (ModelState.IsValid)
     {
         if (await CriaRole())
         {
             return(await CriaUsuario(model));
         }
     }
     return(View(model));
 }
Beispiel #4
0
        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));
        }