O Django inclui um sistema de autenticação completo: models de usuário, sessões, views de login/logout e hash de senha. Tudo isso sem instalar nada a mais.
TL;DR: Implemente autenticação de usuários no Django usando o sistema de auth embutido e tokens JWT para DRF.
Stack: Python, Django, djangorestframework-jwt
Nível: Iniciante
Tempo de leitura: ~7 min
Instalar
Django==3.0.8
djangorestframework==3.14.0
djangorestframework-jwt==1.11.0
Configurar JWT no settings.py
JWT_AUTH = {
'JWT_RESPONSE_PAYLOAD_HANDLER': 'api.utils.jwt_response_payload_handler',
}
Adicionar rota de login no urls.py
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
path('admin/', admin.site.urls),
path('login', obtain_jwt_token),
]
Criar serializers.py
from rest_framework import serializers
from django.contrib.auth.models import User
class UserSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
username = serializers.CharField()
password = serializers.CharField()
email = serializers.CharField()
class Meta:
model = User
fields = ('id', 'username', 'password', 'email')
Criar utils.py (payload JWT personalizado)
from .serializers import UserSerializer
def jwt_response_payload_handler(token, user=None, request=None):
user_data = UserSerializer(user, context={'request': request}).data
return {
'token': token,
'userid': user_data['id'],
'username': user_data['username'],
}
Criar endpoint de usuário
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
@api_view(['POST'])
def create_user(request):
username = request.data.get('username')
email = request.data.get('email')
password = request.data.get('password')
if not username or not email or not password:
return Response({'error': 'Campos obrigatórios faltando'}, status=status.HTTP_400_BAD_REQUEST)
if User.objects.filter(username=username).exists() or User.objects.filter(email=email).exists():
return Response({'error': 'Username ou email já existe'}, status=status.HTTP_400_BAD_REQUEST)
user = User(username=username, email=email, password=make_password(password))
user.save()
return Response({'success': 'Usuário criado com sucesso'}, status=status.HTTP_201_CREATED)
O que você construiu
Autenticação JWT no Django funcionando de ponta a ponta: um endpoint de login que retorna um token, um payload personalizado com informações do usuário e um endpoint de criação de usuário.
Próximos passos
- Adicione AUTHENTICATION_BACKENDS para suportar login por e-mail em vez de username, que é o que a maioria dos usuários espera.
- Use Django AllAuth para autenticação social (Google, GitHub) quando precisar de login OAuth sem construir do zero.
- Estenda o model User padrão com um perfil OneToOneField para adicionar dados específicos do usuário sem modificar o modelo de auth.
Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.