繁体   English   中英

无效的API令牌

[英]Invalid API Token

我对CORS很新。 我正在构建一个React App,它只是将数据发布到后端API。 根据API文档,我必须发送BASIC身份验证标头以及请求,这正是我正在做的事情。 当我通过POSTMAN发送请求时,请求工作正常。 但是,当我从我的APP发出相同的请求时,它会显示无效的API密钥。 以下是我的代码:

App.js:

import React from 'react';

class App extends React.Component{

    state = {
        data: 'data'
    };

    handleClick = async () =>{
        const res = await fetch('https://myapi.com/post',{
             method: 'POST', 
             body: JSON.stringify({tp:'0'}),
             mode: 'cors',
             headers: {
                 content-type:'application/x-www-form-urlencoded',
                 Authorization : 'Basic ' + new Buffer('username:password').toString(base64)
             }
        });
        const data = await res.json();
        this.setState({data});
    }

    render() {
        return(
             <div>
                 <p>{this.state.data}</p>
                 <button onClick={this.handleClick}>Post</button>
             </div>
        );
    }
}

我调查了这个问题,发现在发送请求时没有设置标头。 当进一步深入研究时,我发现上述请求不是一个简单的请求,因此浏览器向服务器发出预检OPTIONS请求。 我不知道服务器如何处理请求,但我认为服务器没有配置为处理预检OPTIONS。 我可能错了。 我没有任何访问服务器代码的权限。 通过CORS Anywhere代理和POSTMAN客户端的相同请求工作正常但不是在使用实际应用程序时。 我使用create-react-app来设置样板。

通过应用程序发送请求时,我得到的是无效的API令牌错误。

任何有关如何将标题传递到服务器的帮助将不胜感激。

根据另一篇文章 ,您可能希望在Headers-object中包装Authorization标头。 我猜你不应该真正关注OPTIONS请求,该请求不应该包含任何用户凭据,服务器不应该真正寻找OPTIONS请求的任何凭据, 更多信息

如果进行以下更改会发生什么(不要忘记npm install base-64)。

import React from 'react';
const base64 = require('base-64');

class App extends React.Component{

    state = {
        data: 'data'
    };

    handleClick = async () => {
        const headers = new Headers();
        headers.append("Authorization", "Basic " + base64.encode("user:password"));

        const res = await fetch('https://myapi.com/post',{
             method: 'POST', 
             body: JSON.stringify({tp:'0'}),
             mode: 'cors',
             headers: headers
        });
        const data = await res.json();
        this.setState({data});
    }

    render() {
        return(
             <div>
                 <p>{this.state.data}</p>
                 <button onClick={this.handleClick}>Post</button>
             </div>
        );
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM