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

Saber se aquele usuário tem autorização para abrir certa página

Olá! Gostei muito do curso! Até fiz paginas extras que cadastram um novo usuário e um botão pra fazer log out. Digamos em além do email, nome_completo e senha, minha tabela de usuários tenha uma propriedade chamada "role" e nela pode ter os valores "Administrador" e "Usuário". Existe alguma forma de eu acessar o email do usuário logado (pelo cookie) para poder procurar o usuário no UsuarioDao e verificar se ele é o Administrador pra acessar tal página?

4 respostas

Se for o que eu entendi, voce poderia, (pelo cookie) na própria rota que só adms podem entrar, fazer uma verificação... por exemplo, quando for criar um usuário e salvar no banco, crie uma propriedade "isAdmin", e use false como padrão, quando for admin de um update para true... agora, na rota que somente admins podem acessar, na própria rota, busque o usuario no banco e verifique se o mesmo é admin (isAdmin: true), sendo assim, se for (if(isAdmin)) entao renderize a pagina, se não, redirecione-o... não sei se essa era examente a dúvida

Até criar o usuário, setar a bool IsAdmin, e usar uma rota com "/admin*" eu já sei. A questão é: como acessar do cookie o userSession que configuramos na função

passport.serializeUser((user, done)=>
    {
        const userSession = {
            name: user.fullname,
            email: user.email
        }

        done(null, userSession);
    });

o valor do email da pessoa logada. Conseguindo ele o resto é fácil pq na aula de configuração da estratégia de login a gente já tem uma função no UsuarioDao que recebe o email e pega do banco de dados.

searchUser(email)
    {
        return new Promise((resolve, reject) =>
        {
            this._db.get("SELECT * FROM usuarios WHERE email = ?", 
            [
                email
            ], (error, user) =>
            {

                if(error || !user)
                {
                   return reject(`This email (${email}) is not registered in database`);
                }

                return resolve(user);
            })
        })

    }

A questão é só como pegar esse cookie e retirar essa informação

Entendiii. Eu tenho mais contato com APIs então não lembro o comando exato, mas se você for em alguma rota que precisa de autenticação, tente:

console.log(req.passport);
console.log(req.session);
console.log(req.session.passport);

Todas vão dar as informações do usuário que está acessando aquela pagina em especifico, porém, nao lembro qual dessas vai dar o resultado que contem apenas os dados do usuário...

Espero que dessa vez vá kk

solução!

Boa noite, Murilo! Como vai?

Que bom que curtiu o conteúdo do curso! Já sobre a sua dúvida, quando serializar o usuário na sessão, uma das informações que vc pode utilizar é a função dele ( a role ).

Daí, sempre que receber uma requisição, vc pode obter o usuário logado fazendo req.session.passport.user dentro de um middleware criado por vc! Com isso, vc irá obter um objeto JavaScript com as informações que vc serializou na sessão e poderá verificar se a tal role tem permissão para acessar a informação requisitada!

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software