Como gerar uma SECRET_KEY do Django

06/07/2020 - 2 min de leitura

DJANGO

Quem nunca deu aquele velho clone em um repositório no github e percebeu que não deixaram a SECRET_KEY pública?

Mas é isso mesmo! A SECRET_KEY sempre deve ser privada. NINGUÉM, além de você, deve ter acesso aquela belezinha de 50 caracteres.

Por quê?

O Django usa a SECRET_KEY para gerenciar algumas issues de segurança na nossa aplicação. Por exemplo, o Django faz a criptografia das senhas dos usuários baseado também na SECRET_KEY, cria aquelas URLs únicas de reset da senha do usuário, além de outras coisinhas na sessão, cookie e etc. Recomendo ler a documentação.

Dito isso, devemos estar cientes que a SECRET_KEY nada mais é que uma String. Então, se você clonar um projeto e colocar a SECRET_KEY com o valor 'a'. Vai funcionar!

É a maneira mais segura? Definitivamente não kkkkk

Qual é a solução?

Você pode gerar 50 caracteres aleatórios (padrão do Django) e adicionar como valor da sua chave secreta.

Mas, existe uma função já pronta do Django que nos traz uma SECRET_KEY. É a função get_random_secret_key do pacote django.core.management.utils. O código dela tá aqui.

É bastante simples. Você pode fazer um script que retorna isso no terminal. Por exemplo:

# generate_secret_key.py

from django.core.management.utils import get_random_secret_key


print(get_random_secret_key())

E no terminal:

python generate_secret_key.py

Você também pode executar todo o conteúdo do arquivo generate_secret_key no próprio terminal, sem precisar criar um arquivo, abrindo o console interativo do python.

Ou, se preferir, você pode executar tudo através da opção -c (cmd) do Python. Essa opção executa algum programa passado por String.

O código anterior produz o mesmo resultado que esse:

python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

Pode mostrar essa para aquele seu amigo que diz que Python não tem ponto e vírgula hehehehe.

O ponto e virgula serve pra você indicar a finalização de um comando em python (quando você tem mais de uma instrução por linha).

Xero.

Foto da capa: Philipp Katzenberger on Unsplash.

Compartilhe

Twitter