Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Tentativa de autenticar algo que não seja um objeto

Fala galera, beleza? Tava com um problema quando ao invés de um objeto, estava passando uma variável (imagine que possa ter digitado errado) e estava sempre tomando o erro de código. Resolvi fazendo uma verificação dentro do método "ehAutenticavel()" se o autenticavel é do tipo objeto, assim:

//Ser autenticável significa ter o método autenticar! Dessa forma, o sistema de autenticação só verifica a existencia do método autenticar!!
export class SistemaAutenticacao {
    //Um método estático é um método que pode ser chamado diretamente da classe, sem necessidade de instanciar nenhum objeto.
    static login(autenticavel, senha) {
        if (SistemaAutenticacao.ehAutenticavel(autenticavel)) {
            if (autenticavel.autenticar(senha)) {
                console.log(`${autenticavel.nome} logado com sucesso`);
                return true;
            } else console.log(`Nome de usuário ou senha inválidos`);

        } else console.log(`${autenticavel} não é um cliente válido`)
    }
    static ehAutenticavel(autenticavel) {
        if (autenticavel instanceof Object) {
            return "autenticar" in autenticavel && autenticavel.autenticar instanceof Function;
        } else return false;
    }

}

Minha dúvida é: Apesar de ter resolvido o problema, esse seria a melhor prática?

2 respostas
solução!

Olá, José, tudo bem?

Nos desculpe a demora a responder.

Gostei da sua ideia! Acredito que você está adicionando mais níveis de verificações ao sistema. Eu apenas diria que, como você está resolvendo tratar esse erro, é interessante você dar mais detalhes à pessoa que está desenvolvendo, assim como você tratou os erros no método login() usando console.log() (você também pode usar console.error()).

Edit: eu acabei de ver aqui na sua resposta que você já está fazendo a tratativa desse erro com o código console.log(`${autenticavel} não é um cliente válido`), então quando o método ehAutenticavel() retornar false, essa frase será mostrada para o caso que um objeto não for passado como parâmetro. Está correto!

Espero ter ajudado! Continue assim e bons estudos :)

Obrigado Antônio!