首页 > 解决方案 > 在带有 ra-data-json-server 承诺问题的 react-admin 中合并 ra-cognito

问题描述

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

我的旧/当前代码运行良好:

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);
}

我的新代码:

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);
            console.log('Authorization set...', data);
        })
       .then(fetchUtils.fetchJson(url, options));
}

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

标签: promiseaws-amplifyreact-admin

解决方案


忘记返回第一个 promise 的结果 oops...

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)
        );
}

推荐阅读