React - 带标头的ajax GET请求仍返回401(未授权)

时间:2018-03-21 15:01:29

标签: javascript ajax reactjs api httprequest

我正在尝试使用带有API密钥的Ajax GET请求从我的学校API获取数据,但我仍然收到401错误消息。我已将API密钥包含在标头中,但似乎无效。

到目前为止,这是我的代码;

class App extends Component {
  constructor(){
    super();
    this.state = {
      todos:[]
    }
  }

  getTodos(){
    $.ajax({
      type: "GET",
      url: 'https://opendata.seamk.fi/r1/reservation/building/2',
      dataType:'json',
      headers: {
        Authorization: "API_KEY"
      },
      cache: false,
      success: function(data){
        this.setState({todos: data}, function(){
          console.log(this.state);
        });
      }.bind(this),
      error: function(xhr, status, err){
        console.log(err);
      }
    });
  }

  componentWillMount(){
    this.getTodos();
  }
  componentDidMount(){
    this.getTodos();
  }


  render() {
    return (
        <Titles />
        <Todos todos={this.state.todos}/>

    );
  }
}

export default App;

控制台消息;

enter image description here

1 个答案:

答案 0 :(得分:2)

听起来你需要使用基本身份验证。

您应该可以通过this

之类的操作将您的凭据添加到您的请求中
$.ajax({
    type: 'GET',
    url: 'url',
    dataType: 'json',
    //whatever you need
    beforeSend: function (xhr) {
        xhr.setRequestHeader('Authorization', make_base_auth(user, password));
    },
    success: function () {});
});

function make_base_auth(user, password) {
    var tok = user + ':' + password;
    var hash = btoa(tok);
    return 'Basic ' + hash;
}

此外,我建议您为http请求使用Axios之类的内容。你真的不需要JQuery with react和axios基于fetch但更好地处理错误。