created: 2021-03-31T09:14:26.000Z

React-admin のAPIリクエストと認証について

こちらの続き

管理画面の表示を認証認可で切り盛りするのはチュートリアルに書いてあったが、APIにリクエストするときのクレデンシャルの渡し方が説明されていなかったのでそれについて調べた。

ドキュメントにはちゃんと記載があって simpleRestProvider のコンストラクタの引数に httpClient を渡すことができる。 これにヘッダをいじる処理を実装して使うことでローカルで持っているクレデンシャルをAPIにヘッダとして送ることができるようになる。

import { fetchUtils, Admin, Resource } from 'react-admin';
import simpleRestProvider from 'ra-data-simple-rest';

const httpClient = (url, options = {}) => {
    if (!options.headers) {
        options.headers = new Headers({ Accept: 'application/json' });
    }
    const { token } = JSON.parse(localStorage.getItem('auth'));
    options.headers.set('Authorization', `Bearer ${token}`);
    return fetchUtils.fetchJson(url, options);
};
const dataProvider = simpleRestProvider('http://localhost:3000', httpClient);

const App = () => (
    <Admin dataProvider={dataProvider} authProvider={authProvider}>
        ...
    </Admin>
);

なお、simpleRestProvider の実装はこのようになっている。サーバ側を実装する際にはここの処理を参照して、極力このプロバイダを使い倒せるようなAPIとして実装すればクライアントの実装をかなり楽にすることができるはず。