Search code examples
djangoauthenticationdjango-rest-frameworkdjango-viewsdjango-authentication

Django Rest Framework permissions outside Rest Framework view


I am using Rest Framework Token authentication. Which means I cannot know if a user is authenticated outside a rest framework view eg:(A regular django view). The Rest Framework token authentication is a custom auth system which can only be used in a rest framework view.

In a normal rest framework view, I can restrict the endpoint for authenticated users by using this:

class ExampleView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request, format=None):
        content = {
            'status': 'request was permitted'
        }
        return Response(content)

But how will I do that for a regular django view. eg:

def someDjangoView(request):
    '''
    Note that I cannout use request.user.is_authenticated.
    It will always return false as I am using rest framework token authentication.
    Which means the request parameter should be of rest framework's and not django's built-in.
    '''
    
    content = {"detail": "Only authenticated users should access this"}
    
    return JsonResponse(content)

I am stuck in a situation where I have to know if a user is authenticated (custom auth) outside a rest framework view.

Is there any way to do that?


Solution

  • You can use the api_view decorator to your function-based view to enable DRF:

    from rest_framework.decorators import api_view, authentication_classes
    
    
    @api_view(http_method_names=['GET', 'POST'])
    @authentication_classes([YourTokenAuthenticationClass])
    def someDjangoView(request):
        print(request.user)
        ...
        return JsonResponse(content)