Получение разрешения на отправку аутентифицированного запроса в OAuth2.0 Django rest Framwork

Я интегрировал OAuth2.0 с django-rest-framework. Когда я отправляю аутентифицированный запрос в представление на основе класса, я получаю это

{
    "detail": "You do not have permission to perform this action."
}

settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}

просмотры.py

    from rest_framework import permissions
    from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope
    class LogoutView(APIView):
        """
            This will help in logout of user.
        """
        authentication_classes = ()
        permission_classes = (permissions.IsAuthenticated, TokenHasReadWriteScope)

        def get(self, request):
            return Response({'s': 'd'})

urls.py

from django.urls import path, re_path
from accounts.views import SignUpView, LoginView, LogoutView

urlpatterns = [
    path('signup/', SignUpView.as_view()),
    path('login/', LoginView.as_view()),
    path('logout/', LogoutView.as_view()),
]

А вот так выглядят мои заголовки

Content-Type:application/json
Authorization:Bearer 4A7qGgmHpbEWlJn5w4wCwxJ9jWfTZ5

Это токен доступа, который я сгенерировал.


person Nipun Garg    schedule 15.02.2018    source источник


Ответы (1)


Убедитесь, что у вас есть следующее в вашем settings.py

AUTHENTICATION_BACKENDS = (
    'oauth2_provider.backends.OAuth2Backend',
    'django.contrib.auth.backends.ModelBackend'
)

А также:

OAUTH2_PROVIDER = {
    'REFRESH_TOKEN_EXPIRE_SECONDS': 360000,
    'SCOPES': {'read': 'Read scope', 'write': 'Write scope', 'groups': 'Access to your groups'},
    'ACCESS_TOKEN_EXPIRE_SECONDS': 1800
}

В целях отладки:

  • Удалить authentication_classes = () из view.py
  • Удалить TokenHasReadWriteScope из view.py

Если вы хотите создать конечную точку выхода из системы, я бы рекомендовал использовать oauth2_views в вашем urls.py:

from oauth2_provider import views as oauth2_views
#.....

urlpatterns = [
    #....
    url(r'^logout/$', oauth2_views.RevokeTokenView.as_view()),
]
person Gal Silberman    schedule 15.02.2018
comment
Все та же проблема - person Nipun Garg; 15.02.2018
comment
Все та же проблема после удаления TokenHasReadWriteScope - person Nipun Garg; 15.02.2018
comment
попробуйте удалить «authentication_classes = ()» из вашего представления - person Gal Silberman; 15.02.2018
comment
Рад, что смог помочь, и спасибо, что приняли ответ! Посмотрите на мое последнее редактирование, вам следует подумать об использовании «oauth2_views». - person Gal Silberman; 15.02.2018
comment
Хорошо!! Обязательно будем ждать - person Nipun Garg; 15.02.2018