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

Não entendi o porquê de criar o método estático "ehAutenticavel"

Qual a necessidade do método ehAutenticavel? Antes o método login já era o suficiente, não???

    export class SistemaAutenticacao {
    static login(autenticavel, senha) {
        return autenticavel.autenticar(senha);
    }

    static ehAutenticavel(autenticavel){
       return "autenticar" in autenticavel &&
        autenticavel.autenticar instanceof Function
    }

    }

Por que não podemos deixar como estava antes? E na classe cliente acrescentar o método "autenticar(senha)" igual na classe funcionário???

Classe SistemaAutenticacao:

export class SistemaAutenticacao {
    static login(autenticavel, senha) {
        return autenticavel.autenticar(senha);
    }
}

Classe Cliente:

export class Cliente{ //classe, é como se fosse um "molde" de uma peça
    //atributos:
    // nome; 
    // _cpf;
    // podem ser omitidos quando é utilizado o constructor

    constructor (nome, cpf, senha){
        this.nome = nome;
        this._cpf = cpf;
        this._senha = senha;
    }
    get cpf(){
        return this._cpf;
    }

    autenticar(senha)
    {
        return senha == this._senha;
    }
}

Se tentar rodar o index, ele aceita.... não dá erro..... Index:


import {Cliente} from "./Cliente.js";
import {Gerente} from "./Funcionarios/Gerente.js";
import {Diretor} from "./Funcionarios/Diretor.js";
import {SistemaAutenticacao} from "./SistemaAutenticacao.js";

const diretor = new Diretor ("Rodrigo", 10000, 12345678900);
diretor.cadastrarSenha("123456");
const gerente = new Gerente("Ricardo", 5000, 12345678901);
gerente.cadastrarSenha("123");

const cliente = new Cliente ("Lais", 78945612300, "456");

const gerenteEstaLogado = SistemaAutenticacao.login(gerente, "123");
const diretorEstaLogado = SistemaAutenticacao.login(diretor, "123456");

const clienteEstaLogado = SistemaAutenticacao.login(cliente, "456");

console.log(gerenteEstaLogado, diretorEstaLogado, clienteEstaLogado);
2 respostas

Boa tarde, Bruna! Tudo bem?

Acredito que o método ehAutenticavel seja importante por dar mais segurança ao acesso da autenticação, para que a senha não fique exposta em algum lugar indevido - em mensagem de erro, por exemplo - já que a verificação da senha passa pelo método citado; além de possibilitar formas diferentes de autenticação, de acordo com cada "autenticável" (Cliente, Diretor, gerente etc.) .

solução!

Olá Bruna,

Complementando o Guilherme, parece que o método ehAutenticavel gerou um trabalho extra desnecessário, visto que já estava funcionando.

Porém, esse método tem a função de verificar se o objeto que está sendo passado para o sistema de autenticação, tem a propriedade autenticar.

Se o método não tiver a propriedade autenticar, ele não é autenticavel, fazer essa verificação, vai prevenir de gerar um erro no seu sistema em tempo de execução.

Vamos supor que você crie um tipo de cliente diferente, onde autenticar não seja um método, mas uma propriedade, dessa forma você teria um problema.

class ClientePremium {

    this.autenticar = true;
}

Por isso que criamos essa verificação, onde além de verificar se tem o atributo, também é verificado se autenticar é uma função.

Espero que tenha ficado mais claro. Forte abraço!