예제 #1
0
        public async Task <ResponseResult> Handle(RefreshTokenCommand request, CancellationToken cancellationToken)
        {
            request.Validate();
            if (request.Notifications.Any())
            {
                _response.AddNotifications(request.Notifications);
                return(_response);
            }

            var usuario = await _unitOfWork.Usuarios.ObterPorEmailAsync(request.Email);

            if (usuario == null ||
                usuario.RefreshToken != request.RefreshToken ||
                usuario.RefreshTokenExpiracao < DateTime.UtcNow)
            {
                _response.AddNotification(new Notification("usuario", Erros.ErroCliente_RefreshTokenNaoAutorizado));
                return(_response);
            }

            var jwt = _geradorToken.GerarToken(usuario);

            usuario.AdicionarRefreshToken(jwt.RefreshToken.Token, jwt.RefreshToken.DataExpiracao);
            await _unitOfWork.SaveAsync();

            _response.AddValue(new
            {
                email = usuario.Email,
                jwt
            });

            return(_response);
        }
예제 #2
0
        public async Task <ResponseResult> Handle(LoginUsuarioCommand request, CancellationToken cancellationToken)
        {
            request.Validate();
            if (request.Notifications.Any())
            {
                _response.AddNotifications(request.Notifications);
                return(_response);
            }

            // Recupera o usuário
            var usuario = await _unitOfWork.Usuarios.ObterPorEmailAsync(request.Email);

            if (usuario == null)
            {
                _response.AddNotification(new Notification("usuario", Erros.ErroCliente_UsuarioOuSenhaInvalido));
                return(_response);
            }

            var passwordResult = _passwordHasher.VerifyHashedPassword(usuario, usuario.PasswordHash, request.Password);

            if (passwordResult == PasswordVerificationResult.Failed)
            {
                _response.AddNotification(new Notification("usuario", Erros.ErroCliente_UsuarioOuSenhaInvalido));
                return(_response);
            }

            var jwt = _geradorToken.GerarToken(usuario);

            usuario.AdicionarRefreshToken(jwt.RefreshToken.Token, jwt.RefreshToken.DataExpiracao);
            await _unitOfWork.SaveAsync();

            _response.AddValue(new
            {
                email = usuario.Email,
                jwt
            });

            return(_response);
        }
예제 #3
0
        public async Task <IActionResult> RealizarLogin(
            [FromBody] VisaoModeloUsuarioLogin loginUsuario,
            [FromServices] IGeradorToken geradorToken)
        {
            if (loginUsuario is null || !ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var objRetorno = new ModeloVisaoRetorno <ModeloVisaoToken>();

            var usuario = _mapper.Map <Usuario>(loginUsuario);

            var usuarioAutenticado = await _servicoAplicacaoUsuario.RealizarLoginUsuario(usuario);

            objRetorno.ObjetoDeRetorno = new ModeloVisaoToken()
            {
                Token     = geradorToken.GerarToken(usuarioAutenticado),
                Nome      = usuarioAutenticado.Nome,
                UsuarioId = usuarioAutenticado.UsuarioId
            };

            return(Ok(objRetorno));
        }