Не получен токен в ответе от приёма реакции app.js - PullRequest
2 голосов
/ 18 апреля 2019

Я связываю django с реакцией.

Я пытаюсь получить токен из конечной точки Django-rest-framework http://127.0.0.1:8000/api/get-token, использующей tokenAuthentication, из response app.js.Я установил коршедеры и все остальное.когда я ударил конечную точку через командную строку с токеном, это работает.Теперь мне нужен токен в моем приложении app.js.Я получаю ответ со статусом 200, но не могу найти токен.Поскольку я новичок, чтобы реагировать, я не уверен, что я что-то упустил.//App.js

  componentDidMount() {
    try {
      const data = {username: 'user', password: 'password'};
      fetch('http://127.0.0.1:8000/api/get-token/', {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(data)
      }).then(function(response) {
        console.log(response.token);
      })
    } catch (e) {
      console.log(e);
    }
  }

Дайте мне знать, если вам нужна дополнительная информация

Я пробовал как TokenAuthentication, так и BasicAuthentication в моих settings.py

REST_FRAMEWORK = {
    ...

    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
  ...
}

1 Ответ

2 голосов
/ 18 апреля 2019

При использовании fetch сначала необходимо прочитать поток ответов , используя .response.json().

Это ваш пример кода с дополнительным then после выборки, чтобы вернуть новое обещание, содержащее ваши данные (проанализированные с помощью JSON):

 componentDidMount() {
    try {
      const data = {username: 'user', password: 'password'};
      fetch('http://127.0.0.1:8000/api/get-token/', {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(data)
      }).then(function(response) {
        return response.json();
      }).then(function(data) {
        console.log(data.token);
      })
    } catch (e) {
      console.log(e);
    }
  }

Примечание: если данные, которые вы получаете с сервера, не являются JSON, вы должны использовать response.text(), чтобы просто проанализировать ответ как строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...