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

Cadastro, Criptografia e Comparação das senhas

Venho fazendo as implementações sozinho no projeto, colho as informaçõs que precisa para implementar e depois faço sozinho , então fiz algumas coisas diferentes. Então quero compartilhar um trecho do meu projeto, implementei de forma diferente algumas coisas, entre elas o metodo signup e login, e tanto a criptografia das senhas quanto a comparação ficou no mesmo arquivo, dentro do controllers/index.js, acredito que ficou mais organizado dessa forma e a implementação ficou boa.

Segue meus códigos, arquivo controllers/index.js:

// Metodo para cadastrar usuario
exports.signup = async (req, res, next) => {
    const { username, email, password } = req.body;

    try {
        // Gera o hash da senha usando bcrypt
        const hashedPassword = await bcrypt.hash(password, 10); // Sal com fator de custo 10

        // Cria uma instância do modelo User com a senha criptografada
        const user = new User(username, email, hashedPassword);

        // Salva o usuário no banco de dados
        await user.save();

        console.log('Usuário cadastrado com sucesso:', { username, email });

        // Redireciona para a página de login após o sucesso
        res.redirect('/');
    } catch (err) {
        // Exibe o erro no console
        console.error('Erro ao cadastrar o usuário:', err);

        // Redireciona/recarrega a página de cadastro
        res.redirect('/signup');
    }
};

//Metodo para realizar o Login do usuário no sistema
exports.login = async (req, res, next) => {
    const { email, password } = req.body;

    try {
        // Busca o usuário pelo e-mail
        const user = await User.findByEmail(email);

        if (!user) {
            console.error('Usuário não cadastrado.');
            return res.redirect('/'); // Redireciona para a página de login
        }

        // Compara a senha digitada com o hash armazenado
        const isPasswordValid = await bcrypt.compare(password, user.password);

        if (!isPasswordValid) {
            console.error('Senha incorreta.');
            return res.redirect('/'); // Redireciona para a página de login
        }

        console.log('Login realizado com sucesso:', user);
        res.redirect('/members'); // Redireciona para a rota de membros
    } catch (err) {
        console.error('Erro ao realizar login:', err);
        res.redirect('/'); // Redireciona para a página de login
    }
};
2 respostas
solução!

Espero que tenham gostado, estou aberto para sugestões.

Oi, José! Como vai?

Obrigada por compartilhar seu código com a comunidade Alura.

Achei interessante a forma como você organizou o signup e o login no mesmo arquivo. Isso pode ajudar a manter o contexto das operações relacionadas à autenticação centralizado, tornando a manutenção mais fácil. Além disso, o uso do bcrypt para hash e comparação de senhas está muito bem implementado.

Conte com o apoio do Fórum na sua jornada. Abraços e bons estudos!