public ActionResult Create(UsuarioViewModel usuarioViewModel) { ViewBag.TiposUsuario = new SelectList(_tipoUsuarioService.GetAll(), "Id", "Descricao"); ViewBag.Organizacoes = new SelectList(_organizacaoService.GetAll(), "Id", "RazaoSocial"); usuarioViewModel.OrganizacaoModel = _organizacaoService.GetById(usuarioViewModel.OrganizacaoModel.Id); if (ModelState.IsValid) { if (!Methods.ValidarCpf(usuarioViewModel.UsuarioModel.Cpf)) { return(RedirectToAction("Create", "Usuario", new { msg = "invalidCpf" })); } // Criando usuario que será passado para a autenticação. var sucesso = new LoginViewModel { Login = usuarioViewModel.UsuarioModel.Cpf, Senha = usuarioViewModel.UsuarioModel.Senha }; // Informações do objeto usuarioViewModel.UsuarioModel.Cpf = Methods.CleanString(usuarioViewModel.UsuarioModel.Cpf); usuarioViewModel.UsuarioModel.Senha = Criptography.GeneratePasswordHash(usuarioViewModel.UsuarioModel.Senha); try { _usuarioService.Insert(usuarioViewModel); TempData["mensagemSucesso"] = "Usuário criado com sucesso!"; } catch (ServiceException se) { TempData["mensagemErro"] = se.Message; return(View(usuarioViewModel)); } return(RedirectToAction("Authenticate", "Login", sucesso)); } // Se nao inserir, vem pra cá e sai. /*var erros = ModelState.Values.SelectMany(m => m.Errors) * .Select(e => e.ErrorMessage) * .ToList(); */ return(View(usuarioViewModel)); }
public async Task <IActionResult> Authenticate(LoginViewModel loginViewModel) { if (ModelState.IsValid) { if (ValidaCpf(loginViewModel.Login)) { // Obtendo o usuario baseado nas informações passadas. var user = _usuarioService.GetByLoginAndPass(Methods.CleanString(loginViewModel.Login), Criptography.GeneratePasswordHash(loginViewModel.Senha)); if (user != null) { var claims = new List <Claim> { new Claim(ClaimTypes.SerialNumber, user.Id.ToString()), new Claim(ClaimTypes.UserData, user.Cpf), new Claim(ClaimTypes.NameIdentifier, user.Nome), new Claim(ClaimTypes.DateOfBirth, user.DataNascimento.ToString()), new Claim(ClaimTypes.Role, _tipoUsuarioService.GetById(user.TipoUsuarioId).Descricao) }; // Adicionando uma identidade as claims. var identity = new ClaimsIdentity(claims, "login"); // Propriedades da autenticação. var claimProperty = new AuthenticationProperties { ExpiresUtc = DateTimeOffset.UtcNow.AddDays(1) // Expira em 1 dia }; // Logando efetivamente. await HttpContext.SignInAsync(new ClaimsPrincipal(identity), claimProperty); // Redirecionando, com usuario logado. return(RedirectToAction("Index", "Home")); } } } // usuario invalido. return(RedirectToAction("Index", "Login", new { msg = "error" })); }
public IActionResult RequestToken([FromBody] LoginViewModel request) { var user = _service.GetByLoginAndPass(Methods.CleanString(request.Login), Criptography.GeneratePasswordHash(request.Senha)); if (user != null) { var claims = new List <Claim> { new Claim(ClaimTypes.SerialNumber, user.Id.ToString()), new Claim(ClaimTypes.UserData, user.Cpf), new Claim(ClaimTypes.NameIdentifier, user.Nome), new Claim(ClaimTypes.DateOfBirth, user.DataNascimento.ToString()), new Claim(ClaimTypes.Role, user.TipoUsuarioId.ToString()) }; // Recebe uma instancia da classe SymmetricSecurityKey e armazena a key de segurança settada no appsettings. var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["SecurityKey"])); // Recebe uma instancia de SigningCredentials contendo a chave de critpgrafia e o algoritmo q fará a encr/descriptogafia var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); // Criando o token efetivamente var token = new JwtSecurityToken( issuer: "ProjetoSalasUFS", // Emissor audience: "ProjetoSalasUFS", claims: claims, expires: DateTime.Now.AddDays(1), // Expiração do token signingCredentials: credentials ); return(Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) })); } return(BadRequest("Credenciais Invalidas")); }