Rek*_*lyi 6 reactjs react-admin
我是反应管理员的新手。我已经阅读了stackoverflow中的所有问题,并且也用谷歌搜索了我的问题,但没有找到任何有用的解决方案。
我正在设置 React-admin 来替换我的一个项目的现有管理页面。我通过 REST API 使用基于 cookie 的身份验证。
是否有可能(如果是,如何?)在 react-admin 中使用它?有人可以引导我走向正确的方向吗?
干杯!
Arm*_*ier 15
这当然是可能的。你只需要fetch使用cookies。
react-admin用于fetch向您的后端发送 http 请求。并且 fetch 默认不发送 cookie。
因此,要fetch发送 cookie,您必须为应用程序进行的credentials: 'include'每次fetch调用添加选项。
(如果您的 admin 和 api 不在同一个域中,则必须在后端启用 CORS。)
请参阅react-admin关于如何在dataProvider此处自定义请求的文档:https : //github.com/marmelab/react-admin/blob/master/docs/Authentication.md#sending-credentials-to-the-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 = localStorage.getItem('token');
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>
);
Run Code Online (Sandbox Code Playgroud)
您必须自定义它以添加options.credentials = 'include'如下:
const httpClient = (url, options = {}) => {
if (!options.headers) {
options.headers = new Headers({
Accept: 'application/json'
});
}
options.credentials = 'include';
return fetchUtils.fetchJson(url, options);
}
Run Code Online (Sandbox Code Playgroud)
您必须为 authProvider 做同样的事情。
就像是
// in src/authProvider.js
export default (type, params) => {
// called when the user attempts to log in
if (type === AUTH_LOGIN) {
const { username, password } = params;
const request = new Request(`${loginUri}`, {
method: 'POST',
body: JSON.stringify({ username: username, password }),
credentials: 'include',
headers: new Headers({ 'Content-Type': 'application/json' }),
});
return fetch(request)
.then(response => {
if (response.status < 200 || response.status >= 300) throw new Error(response.statusText);
localStorage.setItem('authenticated', true);
});
}
// called when the user clicks on the logout button
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2545 次 |
| 最近记录: |