Как авторизоваться для создания объекта с помощью Django Rest Framework и CreateAPIView? - PullRequest
0 голосов
/ 23 марта 2019

У меня проблема, когда я хочу создать объект с помощью CreateAPIView, я получаю сообщение: "detail": "Учетные данные для аутентификации не предоставлены.".

Я использую приложения rest-auth и rest-authtoken.

это то, что я сделал до сих пор:

models.py

class CustomUser(AbstractUser):
    objects = CustomUserManager()
    is_normal_user = models.BooleanField(default=False)
    is_corporate_user = models.BooleanField(default=False)

class CompanyProfile(models.Model):
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
    corporate_name = models.CharField(max_length=30)

serializers.py

class CompanyProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = CompanyProfile
        fields = ['user', 'corporate_name',]
        read_only_fields = ('id',)

views.py

class Authorized_Company_User(permissions.BasePermission):
    def has_permission(self, request, view):
        return bool(request.user and request.user.is_corporate_user)

class CompanyCreateProfileView(generics.CreateAPIView):
    #queryset = CompanyProfile.objects.all()
    serializer_class = CompanyProfileSerializer
    #authentication_classes = (TokenAuthentication,)
    permission_classes = (IsAuthenticated, Authorized_Company_User)

Мне интересно, нужно ли мне определять функцию create и использовать метод get для получения аутентификации пользователя.

1 Ответ

0 голосов
/ 24 марта 2019

"detail": "Учетные данные для аутентификации не предоставлены."

это сообщение вызвано permission_classes = IsAuthenticated

Вам необходимо предоставить токен длявозможность создания.

Добавьте этот URL из приложения rest_auth:

re_path(r'^rest_auth/',include('rest_auth.urls'))

, тогда вы можете использовать почтальон для выполнения тестов

method :POST
url: http://127.0.0.1:8000/rest_auth/login/
body: {"username":"user", "password":"password"}
headers: Content-Type: Application/json

в качестве ответа, который вы получите

`{"key":"here your token"}`

с этим токеном вы можете добавить нового пользователя

method :POST
url: http://127.0.0.1:8000/add_user_url/
body: {"corporate_name":"corporate"}
headers: Content-Type: Application/json
         Authorization: "Token ########here your token########"

И в вашем CreateAPIView вы можете назначить пользователя:

class CompanyCreateProfileView(generics.CreateAPIView): 
    def perform_create(self, serializer):
            serializer.save(user=self.request.user)
...