【问题标题】:Attaching Cognito Authorization to a axios post request将 Cognito 授权附加到 axios 发布请求
【发布时间】:2020-01-19 17:59:43
【问题描述】:

我有一个需要将文件发布到 API 网关的反应应用程序。 react 应用程序通过 Cognito 对用户进行身份验证,API 网关需要身份验证。

这里的任何帮助将不胜感激!最初我尝试使用 Amplify 为您管理所有授权,但显然它不会传递二进制数据,因此我使用 Axios。

但是我收到以下错误消息:

授权标头中不是有效的键=值对(缺少等号):'eyJra....'

uploadfile = async (event) => {
    let file = event.target.files[0];
    let reader = new FileReader();
    reader.readAsArrayBuffer(file);
    reader.onload = async () => {
        try
        {
            let request = {
            method: 'POST',
            url: 'https://XXXXXXXXXX.execute-api.us-east-1.amazonaws.com/dev/upload',
            headers: {
                'Content-Type': 'image/png',
                //'Authorization': 'Bearer ' + this.props.JWT,
                'Authorization': this.props.JWT,
            },
            data: reader.result          
            };
            return axios(request); 
        }
        catch(e)
        {
            console.log(e);
        }
    };
}

我已经看到了很多这样做的例子,但没有一个例子解释了你需要传递给授权的内容。我假设它是我从 Cognito 获得的 JWT 令牌。

这就是我获得 JWT 令牌的方式:

let res = await Auth.currentSession();
const info = await Auth.currentUserInfo();
let accessToken = res.getAccessToken();
let jwt = accessToken.getJwtToken();

如您所见,我还将 Bearer 添加到 JWT 令牌中,但它不起作用。

【问题讨论】:

  • 您找到解决方案了吗?

标签: reactjs aws-api-gateway amazon-cognito


【解决方案1】:

我们发现不是发送二进制文件。而是将二进制文件转换为 base64。这样,您通过 Amplify 发出的就是计划文本。在接收端,您将 base64 转换回二进制。有预建的功能,这使得它很简单。

【讨论】:

    猜你喜欢
    • 2020-02-11
    • 1970-01-01
    • 2017-08-20
    • 2021-01-09
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    相关资源
    最近更新 更多