"detail": "Учетные данные для аутентификации не были предоставлены." postman django
Попытка выполнить авторизацию по токенам
Когда я делаю POST-запрос через postman, он выдает ошибку
"detail": "Authentication credentials were not provided."
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_PARSER_CLASSES':[
'rest_framework.parsers.JSONParser',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
#'rest_framework.authentication.SessionAuthentication',
#'rest_framework_simplejwt.authentication.JWTAuthentication',
]
manager.py
from django.contrib.auth.models import BaseUserManager
from django.core.exceptions import ValidationError
from django.core.validators import validate_email
from django.utils.translation import gettext_lazy as _
class UserManager(BaseUserManager):
def email_validator(self, email):
try:
validate_email(email)
except ValidationError:
raise ValueError(_("please ener a valid email"))
def create_user(self, email, username, password, **extra_fields):
if email:
email=self.normalize_email(email)
self.email_validator(email)
else:
raise ValueError(_("an email adress is required"))
if not username:
raise ValueError(_("an username is required"))
user=self.model(email=email, username=username, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password, **extra_fields):
extra_fields.setdefault("is_staff", True)
extra_fields.setdefault("is_superuser", True)
extra_fields.setdefault("is_verified", True)
if extra_fields.get("is_staff") is not True:
raise ValueError(_("is staff must be true for admin user"))
if extra_fields.get("is_superuser") is not True:
raise ValueError(_("is superuser must be true for admin user"))
user = self.create_user(
email, username, password, **extra_fields
)
user.save(using=self._db)
return user
<
from django.shortcuts import render
from rest_framework.generics import GenericAPIView
from .serializers import UserSerializer
from rest_framework.response import Response
from rest_framework import status
from .utils import send_code_to_user
class RegisterUserView(GenericAPIView):
serializer_class=UserSerializer
def post(self, request):
user_data=request.data
serializer=self.serializer_class(data=user_data)
if serializer.is_valid(raise_exception=True):
serializer.save()
user=serializer.data
send_code_to_user(user['email'])
return Response({
'data':user,
'message':f'hi{user.username}'
}, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
serializers.py
from rest_framework import serializers
from .models import Users
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(max_length=68, min_length=6, write_only=True)
password2 = serializers.CharField(max_length=68, min_length=6, write_only=True)
class Meta:
model=Users
fields=['email', 'username', 'password', 'password2']
def validate(self, attrs):
password = attrs.get('password', '')
password2 = attrs.get('password2', '')
if password != password2:
raise serializers.ValidationError("passwords do not mutch")
return attrs
def create(self, validated_data):
user=Users.objects.create_user(
email=validated_data['email'],
username=validated_data.get['username'],
password=validated_data.get['password'],
)
return user
urls.py (app)
from django.urls import path
from .views import RegisterUserView
urlpatterns = [
path('register/', RegisterUserView.as_view(), name='register')
]
urls.py (проект)
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/v1/auth/', include('auth_app.urls')),
]
<<<0>> >
Актуально устанавливать аутентификацию для этого api, когда пользователь хочет зарегистрироваться, когда он/она еще не зарегистрировался и не аутентифицировался в вашем приложении, и вам нужно сказать в вашем views.py
permission_classes = [permissions.AllowAny]
также при использовании User and Password лучше использовать простой jwt и установить access_token для пользователя и в postman, передав доступ в авторизации в berear tap аутентифицировать его