public ActionResult Token(string username, string password) { //sleep timer to demonstrate the loading bar Thread.Sleep(2000); //get user from data store var user = userService.GetByName(username); //validate password if (user == null) { return(BadRequest("Invalid credentials")); } if (user.Active != true) { return(BadRequest("Account not active")); } if (hashingService.VerifyHashedPassword(user.PasswordHash, password) == PasswordVerificationResult.Failed) { return(BadRequest("Invalid credentials")); } //create claims var claims = new List <Claim> { new Claim("uid", user.Id.ToString(CultureInfo.InvariantCulture), ClaimValueTypes.Integer) }; //create tokens var accessToken = jwtTokenService.GenerateAccessToken(user.UserName, null, claims); var refreshToken = jwtTokenService.GenerateRefreshToken(); //store refresh token jwtTokenService.StoreRefreshToken(user.Id, refreshToken); return(Ok(new JwtToken { AccessToken = accessToken, RefreshToken = refreshToken, TokenType = "bearer" })); }
public LoginResultViewModel Login(LoginViewModel loginViewModel) { var user = _benutzerService.GetByEmail(loginViewModel?.Email?.ToLowerInvariant()); var errorMessage = "Benutzername oder Passwort falsch."; if (user == null) { throw new CustomException(errorMessage); } // TODO: Sperrung aktivieren, wenn Entsperrung möglich ist //if (user.IstGesperrt) //{ // throw new CustomException("Ihr Benutzer ist gesperrt. Kontaktieren Sie einen Administrator zur Entsperrung."); //} PasswordVerificationResult verificationResult = _passwordHashingService.VerifyHashedPassword(user.Passwort, loginViewModel.Passwort); if (verificationResult == PasswordVerificationResult.Failed) { using (var unit = new UnitOfWork()) { var benutzerRepo = unit.GetRepository <BenutzerRepository>(); user.LoginVersuche += 1; //if (user.LoginVersuche >= EnvironmentVariableValues.Loginversuche) //{ //user.IstGesperrt = true; //} _logger.LogInformation("Erfolgloser Login durch " + loginViewModel.Email); benutzerRepo.Update(user); } throw new CustomException(errorMessage); } else if (user.LoginVersuche > 0) { using (var unit = new UnitOfWork()) { var benutzerRepo = unit.GetRepository <BenutzerRepository>(); user.LoginVersuche = 0; benutzerRepo.Update(user); } } _logger.LogInformation($"Erfolgreicher Loginversuch des Benutzers {loginViewModel?.Email}."); SetLastLoginResetLoginversuche(user); return(_mapper.Map <LoginResultViewModel>(user)); }