在带有ra-data-json-server promise问题的react-admin中合并ra-cognito

时间:2019-09-23 08:46:23

标签: promise aws-amplify react-admin

我一直在react-admin(使用cognito)中使用自己的身份验证实现,但是我想切换到ra-cognito。但是我无法弄清楚如何在ra-data-json-server的httpClient内实现AWS Amplify的Auth.currentSession()承诺。

我的旧/当前代码运行正常:

document.addEventListener('click', function enableSubmit(event)
{
    let submitBtn = document.getElementById("submitBtn");
    if (event.target.type === "radio" && event.target.name === "number")
    {
        submitBtn.removeAttribute("disabled");
        // Now, we can also remove this vary event listener:
        document.removeEventListener('click', enableSubmit);
    }
});

我的新代码:

import jsonServerProvider from 'ra-data-json-server';
const httpClient = (url, options = {}) => {
    if (!options.headers) {
        options.headers = new Headers({Accept: 'application/json'});
    }

    // cognitoIdToken item set on authentication 
    const cognitoIdToken = localStorage.getItem('cognitoIdToken');
    options.headers.set('Authorization', cognitoIdToken);

    return fetchUtils.fetchJson(url, options);
}

新代码显然是错误的,但是我不知道将Auth.currentSession承诺合并到httpClient函数中。

1 个答案:

答案 0 :(得分:0)

忘记返回第一个承诺结果...

import jsonServerProvider from 'ra-data-json-server';
const httpClient = (url, options = {}) => {
    if (!options.headers) {
        options.headers = new Headers({Accept: 'application/json'});
    }

    return Auth.currentSession()
        .then(data => {
            options.headers.set('Authorization', data);
            return options;
        })
        .then(options => 
            return fetchUtils.fetchJson(url, options)
        );
}