Аутентификация 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")