Аутентификация токена с DRF не активна

Я новичок в DRF (Django Rest Framework). Я пытаюсь использовать аутентификацию с помощью токена в своих вызовах API.

Я сделал это:

1- При создании нового пользователя:

from django.db.models.signals import post_save
from django.dispatch import receiver
from rest_framework.authtoken.models import Token
from django.conf import settings

# This code is triggered whenever a new user has been created and saved to the database
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
    if created:
        Token.objects.create(user=instance)

2- Создать:

./manage.py createsuperuser --email [email protected] --username fabrice

Две таблицы (authtoken_token и auth_user) в порядке.

Но когда я вызываю API, если не добавляйте токен, api работает :(:

$ http -a fabrice:azerty12 http://127.0.0.1:8000/firerisk/highway/
HTTP/1.1 200 OK
Allow: GET
Content-Length: 179
Content-Type: application/json
Date: Thu, 31 May 2018 12:49:10 GMT
Server: WSGIServer/0.2 CPython/3.5.2
Vary: Accept
X-Frame-Options: SAMEORIGIN

[
    {
        "id": 1,
        "name": "XXX"
    },
    {
    ...
    ...

Но, только этот звонок должен работать, нет ?? :

http -a fabrice:azerty12 http://127.0.0.1:8000/firerisk/highway/ 'Authorization: Token a840a16a3cd43e346f7a3e1442fce0acdf51d609'

И, если я не использую аутентификацию, это неудача и Ничего страшного:

$ http http://127.0.0.1:8000/firerisk/highway/
HTTP/1.1 401 Unauthorized
Allow: GET
Content-Length: 58
Content-Type: application/json
Date: Thu, 31 May 2018 12:25:44 GMT
Server: WSGIServer/0.2 CPython/3.5.2
Vary: Accept, Cookie
WWW-Authenticate: Basic realm = "api"
X-Frame-Options: SAMEORIGIN

{
    "detail": "Informations d'authentification non fournies."
}

Обновлять :

мой settings.py:

    # the REST Framework
    'rest_framework',
    'rest_framework.authtoken',
    'django_extensions',
]

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

и ViewSet (ModelViewSet):

class HighwayViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows highway to be viewed
    """
    serializer_class = HighwaySerializer
    # Authentification !
    permission_classes = (IsAuthenticated,)
    queryset = Highway.objects.all().order_by('name')
    # Only 'get' method
    http_method_names = ['get']

Я не прав ?

Спасибо за помощь.

Ф.

Кажется, что если я вызываю api вот так, он работает (не говоря уже об имени пользователя и пароле): http 127.0.0.1:8000/firerisk/highway 'Авторизация: токен a840a16a3cd43e346f7a3e1442fce0acdf51d609'.

fabrice 31.05.2018 15:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
204
1

Ответы 1

Сначала вам нужно изучить основы. Что такое HTTP, что такое HTTP-заголовки, что такое сеанс Django (это не HTTP-заголовок, и содержимое сеанса не влияет на заголовки), прочтите документацию Django REST Framework по аутентификации токена.

Если вы хотите протестировать свои представления в браузерах, то явно разрешите аутентификацию сеанса Django в переменной конфигурации DRF DEFAULT_AUTHENTICATION_CLASSES. Он может сосуществовать с аутентификацией по токену.

Вы не можете заставить простой веб-браузер добавлять токен к HTTP-запросу, если вы не используете какой-либо плагин, например RESTClient, DHC или REST Easy.

Вы добавляете токен в сеанс Django, но вы отключили аутентификацию сеанса в DRF, и даже если вы включите его, DRF не читает токен из сеанса Django, потому что у клиента API нет возможности добавить токен в сеанс Django. Даже если DRF будет читать токен из сеансов Django, это было бы совершенно бессмысленно, поскольку клиент не может контролировать содержимое th

Привет. Спасибо, но все это я знаю :). Но не вся концепция DRF. Я не упоминал settings.py. Я добавил правильный код в переменные INSTALLED_APPS и REST_FRAMEWORK. Мой комментарий выше работает.

fabrice 31.05.2018 15:23

Другие вопросы по теме