从react app.js获取的响应中未获得令牌

时间:2019-04-18 19:29:34

标签: django reactjs django-rest-framework

我正在链接django进行反应。

我正在尝试从react app.js从使用tokenAuthentication的Django-rest-framework端点http://127.0.0.1:8000/api/get-token获取令牌。 我已经设置了corsheader和restframework。当我通过命令行使用标记击中端点时,它将起作用。现在,我需要在我的react 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);
    }
  }

如果您需要更多信息,请告诉我

我在settings.py中尝试了TokenAuthentication和BasicAuthentication

REST_FRAMEWORK = {
    ...

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

1 个答案:

答案 0 :(得分:2)

使用提取时,首先必须使用.response.json() read the response stream

这是您的代码示例,在提取后带有一个额外的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()来将响应解析为字符串。