コード例 #1
0
        public async Task <IActionResult> Login([FromBody] LoginRequestViewModel model)
        {
            var context = await _interaction.GetAuthorizationContextAsync(model.ReturnUrl);

            string accessToken = string.Empty;

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = await _userManager.FindByEmailAsync(model.Email);

            if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
            {
                await _events.RaiseAsync(new UserLoginSuccessEvent(user.UserName, user.Id, user.Name));

                AuthenticationProperties props = null;
                await HttpContext.SignInAsync(user.Id, user.UserName, props);

                return(Ok());
            }
            await _events.RaiseAsync(new UserLoginFailureEvent(model.Email, "invalid credentials"));

            //ModelState.AddModelError(string.Empty, AccountOptions.InvalidCredentialsErrorMessage);
            return(BadRequest(ModelState));
        }
コード例 #2
0
        public ActionResult Login(LoginRequestViewModel model)
        {
            var loginResult = _userRegistrationService.ValidateUser(model.LoginName, model.Password);

            if (loginResult == Core.Domain.Users.UserLoginResults.Successful)
            {
                var user = this._userService.GetUserByLoginName(model.LoginName);
                _authenticationService.SignIn(user, model.RememberMe);

                var usermodel = new UserViewModel()
                {
                    FirstName    = user.FirstName,
                    LastName     = user.LastName,
                    Email        = user.Email,
                    IsAdmin      = user.IsAdmin,
                    Language     = user.Language,
                    LoginName    = user.LoginName,
                    Phone        = user.Phone,
                    OpenId       = user.OpenId,
                    QQ           = user.QQ,
                    Sex          = user.Sex,
                    Address      = user.Address,
                    Married      = user.Married == null ? false : user.Married.Value,
                    Education    = user.Education,
                    IdentityCard = user.IdentityCard
                };
                return(Json(ResponseMessageExt.Success("", usermodel)));
            }
            else
            {
                return(Json(ResponseMessageExt.Failed(loginResult.ToString())));
            }
        }
コード例 #3
0
        public LoginResponseViewModel Login(LoginRequestViewModel request)
        {
            Log.Information("Start - Login request for user: {0}", request.LoginName);

            LoginResponseViewModel ret = null;
            //1 - validation
            var account = _accountRepository.GetByLoginName(request.LoginName);

            //2 - Check if account exist
            if (account != null && account.Id != 0)
            {
                //3 - Check if password is correct

                if (!String.Equals(CommonHelper.EncodePasswordToBase64(request.Password, _config.GetValue <string>("HashKey")), account.Password))
                {
                    CommonHelper.ThrowAppException("Username or Password is incorrect!");
                }

                ret = new LoginResponseViewModel()
                {
                    LoginName     = account.LoginName,
                    Id            = account.Id,
                    AccountNumber = account.AccountNumber
                };
            }

            Log.Information("End - Login request for user: {0}", request.LoginName);

            return(ret);
        }
コード例 #4
0
        public IActionResult Post([FromServices] ITokenService service, [FromBody] LoginRequestViewModel request)
        {
            try
            {
                var messages = new List <string>();
                if (string.IsNullOrEmpty(request.UserName))
                {
                    messages.Add("UserName or Password invalid!");
                }
                if (string.IsNullOrEmpty(request.Password))
                {
                    messages.Add("UserName or Password invalid!");
                }

                if (messages.Count > 0)
                {
                    return(NotFound(new GenericCommandResult(false, "Error Login", messages)));
                }
                var result = service.GenerateToken(request);

                if (result.Equals(""))
                {
                    return(Unauthorized());
                }

                return(Ok(new GenericCommandResult(true, "Successfully logged in", result)));
            }
            catch (Exception ex)
            {
                return(Ok(new GenericCommandResult(true, "Error authentication", ex.Message)));
            }
        }
コード例 #5
0
        public async Task <IActionResult> Login(LoginRequestViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                var token = await _userApiClient.Authenticate(viewModel);

                if (token != "BadRequest")
                {
                    // Giải mã token
                    var userprincipal  = ValidateToken(token);
                    var authProperties = new AuthenticationProperties()
                    {
                        ExpiresUtc   = DateTime.UtcNow.AddMinutes(10),
                        IsPersistent = false
                    };
                    await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
                                                  userprincipal,
                                                  authProperties
                                                  );

                    string id = userprincipal.Claims.FirstOrDefault(x => x.Type == "Id").Value.ToString();
                    HttpContext.Session.SetString("Token", token);
                    HttpContext.Session.SetString("UserId", id);
                    return(Redirect("/Home/Index"));
                }
                else
                {
                    return(Redirect("Index"));
                }
            }
            return(Redirect("Index"));
        }
コード例 #6
0
        public string GenerateToken(LoginRequestViewModel model)
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            var key          = Encoding.ASCII.GetBytes(_appSettings.Secret);

            var userValido = _userService.DadosValidos(model.UserName, model.Password);

            if (userValido)
            {
                var tokenDescriptor = new SecurityTokenDescriptor
                {
                    Subject = new ClaimsIdentity(new Claim[]
                    {
                        new Claim(ClaimTypes.Name, model.UserName),
                        new Claim("UserID", model.Password)
                    }),
                    Expires            = DateTime.UtcNow.AddHours(2),
                    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
                };

                var token       = tokenHandler.CreateToken(tokenDescriptor);
                var tokenResult = tokenHandler.WriteToken(token);

                return(tokenResult);
            }
            else
            {
                return("");
            }
        }
コード例 #7
0
        public static LoginResponseViewModel Login(LoginRequestViewModel model)
        {
            var result = new LoginResponseViewModel();

            try
            {
                var existingUser = db.Users.FirstOrDefault(p => p.UserName == model.UserName);
                if (existingUser == null)
                {
                    result.Message = "User not found";
                }
                else
                {
                    if (model.HashedPassword == existingUser.PasswordHashed)
                    {
                        result.Status   = true;
                        result.Message  = "Successfully logged in";
                        result.UserId   = existingUser.Id;
                        result.UserName = existingUser.UserName;
                        result.Type     = existingUser.UserType;
                    }
                    else
                    {
                        result.Message = "Password didnot match";
                    }
                }
            }
            catch (Exception ex)
            {
                result.Message = ex.Message;
            }

            return(result);
        }
コード例 #8
0
        public IActionResult Post([FromBody] LoginRequestViewModel value)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var loginstatus = _users.AuthenticateUsers(value.UserName,
                                                               EncryptionLibrary.EncryptText(value.Password));

                    if (loginstatus)
                    {
                        var userdetails = _users.GetUserDetailsbyCredentials(value.UserName,
                                                                             EncryptionLibrary.EncryptText(value.Password));

                        if (userdetails != null)
                        {
                            // Jason Web Token (Jwt) security token handler
                            var tokenHandler = new JwtSecurityTokenHandler();
                            var key          = Encoding.ASCII.GetBytes(_appSettings.Secret);

                            var tokenDescriptor = new SecurityTokenDescriptor
                            {
                                Subject = new ClaimsIdentity(new Claim[]
                                {
                                    new Claim(ClaimTypes.Name, userdetails.UserId.ToString())
                                }),
                                Expires            = DateTime.UtcNow.AddDays(1),
                                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),
                                                                            SecurityAlgorithms.HmacSha256Signature)
                            };
                            var token = tokenHandler.CreateToken(tokenDescriptor);
                            value.Token = tokenHandler.WriteToken(token);

                            // Remove password before returning
                            value.Password = null;
                            value.Usertype = userdetails.RoleId;

                            return(Ok(value));
                        }
                        else
                        {
                            value.Password = null;
                            value.Usertype = 0;
                            return(Ok(value));
                        }
                    }
                    value.Password = null;
                    value.Usertype = 0;
                    return(Ok(value));
                }
                value.Password = null;
                value.Usertype = 0;
                return(Ok(value));
            }
            catch (Exception)
            {
                throw;
            }
        }
コード例 #9
0
        public Usuario DeViewModelParaModel(LoginRequestViewModel viewModel)
        {
            Usuario model = new Usuario();

            model.PreencherLogin(viewModel.Email, viewModel.Senha);

            return(model);
        }
コード例 #10
0
        public LoginResponseViewModel Obter(LoginRequestViewModel request)
        {
            Login requestModel              = _loginMapper.DeViewModelParaModel(request);
            Login responseModel             = _loginService.Obter(requestModel);
            LoginResponseViewModel response = _loginMapper.DeModelParaViewModel(responseModel);

            return(response);
        }
コード例 #11
0
        public ActionResult Login(LoginRequestViewModel loginRequestViewModel)
        {
            // Initialize
            questStatus            status = null;
            LoginResponseViewModel loginResponseViewModel = null;


            /*----------------------------------------------------------------------------------------------------------------------------------
            * Log Operation
            *---------------------------------------------------------------------------------------------------------------------------------*/
            status = LogOperation();
            if (!questStatusDef.IsSuccess(status))
            {
                loginResponseViewModel = new LoginResponseViewModel();
                loginResponseViewModel.UserMessages[0] = new UserMessageModeler(status).UserMessage;
                status.Message = null;
                loginResponseViewModel.questStatus = status;
                TempData["LoginResponseViewModel"] = loginResponseViewModel;
                return(RedirectToAction("Index"));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Authorize
            *---------------------------------------------------------------------------------------------------------------------------------*/
            status = Authorize();
            if (!questStatusDef.IsSuccess(status))
            {
                loginResponseViewModel = new LoginResponseViewModel();
                loginResponseViewModel.UserMessages[0] = new UserMessageModeler(status).UserMessage;
                status.Message = null;
                loginResponseViewModel.questStatus = status;
                TempData["LoginResponseViewModel"] = loginResponseViewModel;
                return(RedirectToAction("Index"));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Login
            *---------------------------------------------------------------------------------------------------------------------------------*/
            UserSessionId  userSessionId  = null;
            AccountModeler accountModeler = new AccountModeler(this.Request, this.UserSession);

            status = accountModeler.Login(Request, loginRequestViewModel, out userSessionId);
            if (!questStatusDef.IsSuccess(status))
            {
                loginResponseViewModel = new LoginResponseViewModel();
                ////loginResponseViewModel.UserMessages.Add(new UserMessageModeler(new questStatus(Severity.Error, "Invalid username or password")).UserMessage);
                loginResponseViewModel.UserMessages.Add(new UserMessageModeler(new questStatus(status.Severity, status.Message)).UserMessage);
                status.Message = null;
                loginResponseViewModel.questStatus = status;
                TempData["LoginResponseViewModel"] = loginResponseViewModel;
                return(RedirectToAction("Index"));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Direct user to home page.
            *---------------------------------------------------------------------------------------------------------------------------------*/
            return(RedirectToAction("Index", "Home", new { _ctx = userSessionId.Id }));
        }
コード例 #12
0
        public Login DeViewModelParaModel(LoginRequestViewModel viewModel)
        {
            Login model = new Login
            {
                Email = viewModel.Email,
                Senha = viewModel.Senha
            };

            return(model);
        }
コード例 #13
0
        public LoginResponseViewModel LogIn(LoginRequestViewModel request)
        {
            LoginResponseViewModel response = _loginAppService.Obter(request);

            if (response != null && !string.IsNullOrEmpty(response.Nome))
            {
                _customAuthenticationStateProvider.LogIn(response);
            }

            return(response);
        }
コード例 #14
0
        private async Task <ClaimsIdentity> Authenticate(LoginRequestViewModel viewModel)
        {
            User user = await _accountService.Authenticate(viewModel.Username, viewModel.Password);

            if (user == null)
            {
                return(null);
            }

            return(BuildClaimsIdentity(user));
        }
コード例 #15
0
        public LoginResponseViewModel Login(LoginRequestViewModel login)
        {
            var result         = _clientBusiness.Login(_mapper.Map <Client>(login));
            var loginViewModel = _mapper.Map <LoginResponseViewModel>(result);

            if (result != null)
            {
                loginViewModel.Claims = _clientBusiness.GetClaims(result.Id).ToList();
            }

            return(loginViewModel);
        }
コード例 #16
0
        private void Login()
        {
            if (string.IsNullOrWhiteSpace(txtUserName.Text))
            {
                MessageBox.Show("Username is required");
                return;
            }
            if (string.IsNullOrWhiteSpace(txtPassword.Text))
            {
                MessageBox.Show("password is required");
                return;
            }

            var loginrequest = new LoginRequestViewModel()
            {
                UserName = txtUserName.Text,
                Password = txtPassword.Text
            };
            var result = Services.UserService.Login(loginrequest);

            if (result.Status)
            {
                switch (result.Type)
                {
                case Common.UserType.Student:
                    StudentDashboard student = new StudentDashboard(result);
                    student.Show();
                    break;

                case Common.UserType.Teacher:
                    TeacherDashboard teacher = new TeacherDashboard(result);
                    teacher.Show();
                    break;

                case Common.UserType.Parent:
                    break;

                case Common.UserType.Admin:

                    AdminDashboard admin = new AdminDashboard(result);
                    admin.Show();
                    break;

                default:
                    break;
                }
                this.Hide();
            }
            else
            {
                MessageBox.Show(result.Message);
            }
        }
コード例 #17
0
        public IActionResult Login([FromBody] LoginRequestViewModel request)
        {
            var user = _userRepository.GetByUsername(request.Username);

            if (user != null && user.Password == request.Password)
            {
                var token = _authenticationService.GenerateBearerToken(user);
                return(Ok(token));
            }

            return(Unauthorized("Wrong username or password"));
        }
コード例 #18
0
        public async Task <ActionResult <LoginResponseViewModel> > LoginAsync([FromBody] LoginRequestViewModel request, CancellationToken cancellationToken)
        {
            var response = await _loginGateway.LoginAsync(_mapper.Map <LoginRequest>(request), cancellationToken);

            if (string.IsNullOrWhiteSpace(response?.Token))
            {
                return(Ok(new LoginResponseViewModel("LoginAsync failed", false)));
            }

            Cookies.SetUserToken(Response, response.Token);

            return(Ok(new LoginResponseViewModel($"Welcome {request.Username}", true)));
        }
コード例 #19
0
        public async Task <IActionResult> authenticate([FromBody] LoginRequestViewModel request)
        {
            var resultToken = await _userService.Authencate(request);

            if (string.IsNullOrEmpty(resultToken))
            {
                return(BadRequest("Username or password incorrect"));
            }
            else
            {
                return(Ok(resultToken));
            }
        }
コード例 #20
0
        public async Task <dynamic> Post([FromBody] LoginRequestViewModel req)
        {
            _logger.Log(new LogInformation
            {
                Module  = CrossCuttingLayer.Logging.Constants.TokenModule,
                UserId  = _userContextAccessor.UserId,
                Message = CrossCuttingLayer.Logging.Constants.MethodInvokedMessage
            });

            var applicationUser = await _user.Service.ValidateUser(req, 1);

            //await _user.Service.ValidateUser(req, 1); //_userContextAccessor.UserId
            return(applicationUser);
        }
コード例 #21
0
        public ActionResult Authenticate(LoginRequestViewModel loginRequestViewModel)
        {
            // Initialize
            questStatus        status             = null;
            UserMessageModeler userMessageModeler = null;


            /*----------------------------------------------------------------------------------------------------------------------------------
            * Log Operation
            *---------------------------------------------------------------------------------------------------------------------------------*/
            status = LogOperation();
            if (!questStatusDef.IsSuccess(status))
            {
                userMessageModeler = new UserMessageModeler(status);
                return(Json(userMessageModeler, JsonRequestBehavior.AllowGet));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Authorize
            *---------------------------------------------------------------------------------------------------------------------------------*/
            status = Authorize();
            if (!questStatusDef.IsSuccess(status))
            {
                userMessageModeler = new UserMessageModeler(status);
                return(Json(userMessageModeler, JsonRequestBehavior.AllowGet));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Login
            *---------------------------------------------------------------------------------------------------------------------------------*/
            UserSessionId  userSessionId  = null;
            AccountModeler accountModeler = new AccountModeler(this.Request, this.UserSession);

            status = accountModeler.Login(Request, loginRequestViewModel, out userSessionId);
            if (!questStatusDef.IsSuccess(status))
            {
                userMessageModeler = new UserMessageModeler(status);
                return(Json(userMessageModeler, JsonRequestBehavior.AllowGet));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Return result.
            *---------------------------------------------------------------------------------------------------------------------------------*/
            BaseUserSessionViewModel baseUserSessionViewModel = new BaseUserSessionViewModel();

            baseUserSessionViewModel._ctx        = userSessionId.Id;
            baseUserSessionViewModel.questStatus = new questStatus(Severity.Success, "Successfully authenticated");
            return(Json(baseUserSessionViewModel, JsonRequestBehavior.AllowGet));
        }
コード例 #22
0
        public async void Login_LoginModelError()
        {
            //Arrange
            var mockLoginRequest = new LoginRequestViewModel();

            _accountController.ModelState.AddModelError("LoginName", "Username field is required");
            _accountController.ModelState.AddModelError("Password", "Password field is required");
            //Act
            var result = await _accountController.Login(mockLoginRequest);


            //Assert
            Assert.True(((ViewResult)result).ViewData.ModelState["LoginName"].Errors.Count > 0);
            Assert.True(((ViewResult)result).ViewData.ModelState["Password"].Errors.Count > 0);
        }
コード例 #23
0
        public async Task <IActionResult> Login([FromBody] LoginRequestViewModel model)
        {
            LoginInteractor loginRequestInteractor = new LoginInteractor(_authenticationService, _accountRepository, _jwtFactory, _jwtOptions);
            var             requestMessage         = new LoginRequestMessage(model.Email, model.Password);
            var             responseMessage        = await loginRequestInteractor.Handle(requestMessage);

            var presenter = new LoginResponsePresenter();

            var viewModel = presenter.Handle(responseMessage);

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            return(new OkObjectResult(viewModel));
        }
コード例 #24
0
        public async Task <string> Authencate(LoginRequestViewModel request)
        {
            var user = await _userManager.FindByNameAsync(request.UserName);

            if (user == null)
            {
                return(null);
            }
            var result = await _signInManager.PasswordSignInAsync(user, request.Password, request.RemenberMe, true);

            if (!result.Succeeded)
            {
                return(null);
            }
            var roles = await _userManager.GetRolesAsync(user);

            var claims = new[]
            {
                new Claim("Email", user.Email),
                new Claim("FristName", user.FristName),
                new Claim("Id", user.Id.ToString()),
                new Claim("Roles", string.Join(";", roles))
            };
            //var tokenHandler = new JwtSecurityTokenHandler();
            //var key = Encoding.ASCII.GetBytes(_config["AppSettings:Secret"]);
            //var tokenDescriptor = new SecurityTokenDescriptor
            //{
            //    Subject = new ClaimsIdentity(claims),
            //    Expires = DateTime.UtcNow.AddDays(7),
            //    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            //};
            //var token = tokenHandler.CreateToken(tokenDescriptor);
            //return tokenHandler.WriteToken(token);
            var key   = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Tokens:Key"]));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken("abc",
                                             "abc",
                                             claims,
                                             expires: DateTime.Now.AddHours(3),
                                             signingCredentials: creds);

            return(new JwtSecurityTokenHandler().WriteToken(token));
            //throw new NotImplementedException();
        }
コード例 #25
0
        public HttpResponseMessage Login([FromBody] LoginRequestViewModel request)
        {
            var result = new ResultViewModel <User>();

            try
            {
                var user = AutofacConfig.Resolve <IUserService>().Login(request.Username, request.Password);
                result.Code    = "200";
                result.Message = "OK";
                result.Data    = user;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, e));
            }
            return(Request.CreateResponse(HttpStatusCode.OK, result));
        }
コード例 #26
0
        public IActionResult GetToken([FromBody] LoginRequestViewModel loginRequestDto)
        {
            var login = Mapper.Map <LoginDto>(loginRequestDto);
            var state = _userService.Login(login);

            if (state == -1 || state == -2)
            {
                return(Ok(new ResponseViewModel(StatusCodeEnum.AccountError, "账号或密码错误")));
            }
            var tokenString = _tokenService.WriteToken(new UserModel()
            {
                DomainAccount = loginRequestDto.Account
            });

            return(Ok(new DataResponseViewModel()
            {
                Data = new { errorMessage = "", token = tokenString }
            }));
        }
コード例 #27
0
        public async Task <IActionResult> Login([FromBody] LoginRequestViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                ClaimsIdentity identity = await Authenticate(viewModel);

                if (identity == null)
                {
                    return(Unauthorized());
                }

                JwtSecurityToken jwtSecurityToken = BuildToken(_jwtSettings, identity);

                LoginResponseViewModel response = new LoginResponseViewModel(new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken), jwtSecurityToken.ValidTo, jwtSecurityToken.Claims);

                return(Success(response));
            }

            return(Error(ModelState));
        }
コード例 #28
0
        public async Task <string> Authenticate(LoginRequestViewModel viewModel)
        {
            var json        = JsonConvert.SerializeObject(viewModel);
            var httpContent = new StringContent(json, Encoding.UTF8, "application/json");
            var client      = _httClientFactory.CreateClient();

            client.BaseAddress = new Uri("http://apieshop.somee.com");
            var response = await client.PostAsync("/api/User/authenticate", httpContent);

            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                var token = await response.Content.ReadAsStringAsync();

                return(token);
            }
            else
            {
                var status = response.StatusCode;
                return(status.ToString());
            }
        }
コード例 #29
0
ファイル: UserController.cs プロジェクト: niksedk/blog
        public IActionResult Login([FromBody] LoginRequestViewModel request)
        {
            if (request == null)
            {
                return(BadRequest(new ErrorViewModel("Please provide credintials")));
            }

            if (string.IsNullOrWhiteSpace(request.Email))
            {
                return(BadRequest(new ErrorViewModel($"Please provide '{nameof(request.Email)}'")));
            }

            if (string.IsNullOrWhiteSpace(request.Password))
            {
                return(BadRequest(new ErrorViewModel($"Please provide '{nameof(request.Password)}'")));
            }

            var user = _userService.GetUser(request.Email);

            if (user == null)
            {
                // use same message for "unknown user" and "wrong password" to make hacking harder
                return(BadRequest(new ErrorViewModel("Incorrect login")));
            }

            var errorMessage = _userService.LoginPassword(user, request.Password, string.Empty);

            if (!string.IsNullOrEmpty(errorMessage))
            {
                return(BadRequest(new ErrorViewModel(errorMessage)));
            }

            return(Ok(new TokenResponseViewModel
            {
                AccessToken = _userService.GenerateJsonWebToken(user),
                ExpiresIn = 100,
                RefreshToken = Guid.NewGuid().ToString(),
                TokenType = "Bearer"
            }));
        }
コード例 #30
0
        public async Task <IActionResult> Login(LoginRequestViewModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    LoginResponseViewModel response = _accountManager.Login(model);

                    if (response != null)
                    {
                        var claims = new List <Claim>()
                        {
                            new Claim(ClaimTypes.NameIdentifier, response.Id.ToString()),
                            new Claim(ClaimTypes.Name, response.LoginName),
                        };

                        var claimsIdentity = new ClaimsIdentity(
                            claims, CookieAuthenticationDefaults.AuthenticationScheme);

                        var authProperties = new AuthenticationProperties()
                        {
                            IsPersistent = true
                        };

                        await HttpContext.SignInAsync(
                            CookieAuthenticationDefaults.AuthenticationScheme,
                            new ClaimsPrincipal(claimsIdentity),
                            authProperties);

                        return(RedirectToAction("Index", "Home"));
                    }
                }
                catch (AppException app)
                {
                    ModelState.AddModelError(string.Empty, app.Message);
                }
            }

            return(View());
        }