Аутентификация DRF не работает во фронтенде

Итак, я создал приложение для регистрации. Я добавил API регистрации, API входа и API профиля пользователя. Я протестировал три API в Postman, и это дало результаты. В своем проекте я использовал аутентификацию djangorestframework-simplejwt. Когда я тестирую в браузере, он не работает, что я должен сделать, пожалуйста, кто-нибудь может помочь мне в этом.

В settings.py


# JWT Configuration
REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.

    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}



# JWT Settings
SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=20),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),

    'AUTH_HEADER_TYPES': ('Bearer',),
    'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',
    'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',

    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',
    'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser',

    'JTI_CLAIM': 'jti',

}

INSTALLED_APPS = [
    .........
    'rest_framework_simplejwt',
    .........

]

В Views.py


class UserLoginView(APIView):
    def post(self, request, format=None):
        q = QueryDict(request.body)
        query_dict = q.dict()
        json_object = json.dumps(query_dict, indent=4)
        reqBody = json.loads(json_object)
        email = reqBody['email']
        password = reqBody['password']
        user = authenticate(email=email, password=password)
        print('user')
        print(user)
        if user is not None:
            token = get_tokens_for_user(user)
            Account = customer.objects.get(email=email)
            request.session['email'] = Account.email
            request.session['id'] = Account.id
            request.session['name'] = Account.firstname
            request.session['cust_status'] = Account.cust_status
            request.session['os_name'] = Account.os_name
            request.session['user_type'] = Account.flag
            request.session['username'] = str(Account.firstname) + str(Account.lastname)

            return Response({'token': token, 'msg': 'Login Success'}, status=status.HTTP_200_OK)
        else:
            return Response({'errors': {'non_field_errors': ['Email or Password is not Valid']}},
                            status=status.HTTP_404_NOT_FOUND)


После входа тестирование API с аутентификацией

@api_view(['GET'])
@authentication_classes((TokenAuthentication,))
@permission_classes((IsAuthenticated,))
def test_view(request):
    return HttpResponse("Allowed")

Ошибка, которую я получаю

Test View
GET /example_view
HTTP 401 Unauthorized
Allow: OPTIONS, GET
Content-Type: application/json
Vary: Accept
WWW-Authenticate: Token

{
    "detail": "Authentication credentials were not provided."
}

Думаю, вам нужно удалить декоратор authentication_classes, поскольку вы используете аутентификацию JWT.

@api_view(['GET'])
@permission_classes((IsAuthenticated,))
def test_view(request):
    return HttpResponse("Allowed")
Вернуться на верх