Невозможно получить доступ к API django

#django #django-rest-framework #django-views #django-templates

#django #django-rest-фреймворк #django-просмотры #django-шаблоны

Вопрос:

У меня есть следующее settings.py .У меня есть только аутентификация по токену

 REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
        
    ],
    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated',),
}

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
    'rest_framework.authtoken',
    
 

views.py

 class UserView(APIView):
    authentication_classes = [TokenAuthentication]
    permission_classes = [IsAuthenticated]
    def get(self,request,*args,**kwargs):
        print(request.user)
 

Когда я пытаюсь получить доступ к определенному URL-адресу, я получаю следующую ошибку

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

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

Я попытался удалить IsAuthenticated, тогда это работает, но пользователь является анонимным пользователем.Как мне это исправить? Я хочу получить доступ к текущим данным пользователя, вошедшего в систему. Кроме того, как мне получить к нему доступ на уровне URL-адреса.Например, у меня есть URL-адрес «localhost:8000/api/values/param1 /param2» Как я могу предоставить здесь токен? Я получаю сообщение об ошибке, когда пытаюсь получить доступ к этому URL-адресу на самом деле

Ответ №1:

Поздравляю, ваши конечные точки API теперь защищены! это нормальное поведение. Вам необходимо предоставить токен при попытке доступа к ресурсам. Это с точки зрения интерфейса.

Ознакомьтесь с документацией: https://www.django-rest-framework.org/api-guide/authentication /

Для аутентификации клиентов ключ токена должен быть включен в HTTP-заголовок авторизации. Ключ должен иметь префикс строкового литерала «Token» с пробелом, разделяющим две строки. Например:

 Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
 

Комментарии:

1. куда я могу отдать жетон? Я имею в виду, какой файл? views.py или settings.py

2. Я имею в виду, нужно ли мне указывать токен по URL, потому что я хочу получить доступ к зарегистрированному токену пользователя

3. Чтобы быстро протестировать вашу систему аутентификации (например, сгенерировать токен, зарегистрировать нового пользователя, аутентифицировать пользователя), вы можете использовать Postman .

4. да, но как мне получить к нему доступ на уровне url. Например, у меня есть URL-адрес » localhost: 8000/api/values/param1 / param2 » Как я могу дать здесь знак внимания? Я получаю сообщение об ошибке, когда пытаюсь получить доступ по этому URL-адресу на самом деле @Ivan