3
respostas

Sistema de autenticaçao

No fim do projeto, testei trocar a senha e ver se ele retornava falso, mas ele sempre retorna true caso haja uma senha, mesmo que nao esteja igual. Aguém mais com esse problema?

Funcionários:

export class Funcionarios{
    constructor(nome, salario, cpf){
        this.nome;
        this.salario;
        this.cpf;

        this._bonificacao = 1;
        this._senha;
    }

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

}

sistema de autenticaçao

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

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

testando colocar senhas diferentes para o cliente no index:

import {Cliente} from "./Cliente.js";
import {Diretor} from "./Funcionários/Diretor.js"
import {Gerente} from "./Funcionários/Gerente.js"
import { SistemaAutenticacao } from "./SistemaDeAutenticacao.js";

const diretor = new Diretor("Rodrigo", 10000, 123456);
const gerente = new Gerente("Ana", 5000, 321654);
diretor.cadastrarSenha("123456")

gerente.cadastrarSenha("123")
const cliente = new Cliente("Laís", 7777, "456")

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


console.log(gerenteEstaLogado, diretorEstaLogado, clienteEstaLogado)

Quando eu testo a senha do diretor e do gerente dá certo

3 respostas

Olá Leila, tudo bem?

Pelo que observei, nesses trechos que você mandou, parece que o seu código está certo em relação ao método autenticar da classe Funcionario.

Dá uma olhada na sua classe Cliente, porque provavelmente ela está retornando true:

autenticar(senha){
        return true;
    }

Se não for isso, manda abaixo a classe pra a gente dar uma olhada.

Forte abraço! Espero ter ajudado.

Oi Matheus, isso mesmo, ela tá retornando true:

export class Cliente {
     get cpf(){
        return this._cpf
    }

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

    autenticar(){
        return true;
    }
}

Era pra estar diferente?

Oi Leila,

Agora está super simples de você resolver o problema, basta você implementar o método autenticar na classe Cliente:

export class Cliente {
     get cpf(){
        return this._cpf
    }

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

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

Agora ele vai fazer aquela verificação se a senha cadastrada é igual a senha de login e vai retornar false:

const cliente = new Cliente("Laís", 7777, "456");
const clienteEstaLogado = SistemaAutenticacao.login(cliente, "45356");

console.log(clienteEstaLogado); // false

Mas colocando a mesma senha na criação do objeto cliente e no login vai retornar true.

Faz o teste e verifica se agora está funcionando certinho no seu código.