Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Função não redireciona.

Olá pessoal da Alura,

Estou fazendo meu sistema um pouco diferente, eu simplesmente não quero o 'usuario_logado' quando for None ou não estiver na sessão, veja minhas páginas, e para isso em todas as funções de exibir uma página eu coloco o seguinte código mostrado na aula.

if 'usuario_logado' not in session or session['usuario_logado'] == None:
        return redirect('/login')

Até aqui tudo certo, meu problema é que eu não queria colocar esse código em todas as minhas funções que renderizam páginas, então fiz a seguinte função.

def verifica_login():
    if 'usuario_logado' not in session or session['usuario_logado'] == None:
        print('aa')
        return redirect('/login')

Só que quando eu uso essa função e ela printa o 'aa' (o que significa que estou sem usuário) ela simplesmente não redireciona para login, ao contrário de quando o código na função de exibir uma página.

Resumindo: Jeito 1: Funciona

@app.route('/')
def exibir_index():
    if 'usuario_logado' not in session or session['usuario_logado'] == None:
        return redirect('/login')

    return render_template('certificado_lista.html',
                            titulo="Lista de Certificados",
                            certificados=lista)

Jeito 2: Não Funciona

@app.route('/')
def exibir_index():
    verifica_login()
    return render_template('certificado_lista.html',
                            titulo="Lista de Certificados",
                            certificados=lista)

def verifica_login():
    if 'usuario_logado' not in session or session['usuario_logado'] == None:
        print('aa')
        return redirect('/login')

Por que o Jeito 2 não funciona?

1 resposta
solução!

Oi Renan, tudo bom?

Basicamente, quando fazemos:

        return redirect('/login')

Pelo controller, estamos devolvendo um redirecionamento pro navegador do usuário (no fim das contas).

Quando fazemos a mesma coisa, de dentro de outro método, estamos devolvendo esse redirecionamento para o controller, que não faz nada com ele:

def exibir_index():
    verifica_login()

Aqui, deveriamos guardar esse redirecionamento em uma variavel. Algo como:

def exibir_index():
    redirecionamento = verifica_login()

Com isso, podemos verificar se o redirecionamento está vazio ou não pra poder redirecionar o usuario no controller. Algo como:

def exibir_index():
    redirecionamento = verifica_login()
    if redirecionamento:
        return redirecionamento
...

Abraço

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