admin-on-rest / restClient :调用没有授权的资源

admin-on-rest / restClient : call a resource with no auth

我制作了一个使用 restClient 将 POST 发送到 /users api 的注册页面。 但我的问题是发送 POST 的唯一方法是在我从 restClient 收到此错误日志时首先记录:

'Could not find stored JWT and no authentication strategy was given'

有没有办法为特定的 api 调用停用身份验证中间件?

// registerActions.js
import { CREATE } from 'admin-on-rest'

export const USER_REGISTER = 'AOR/USER_REGISTER'
export const USER_REGISTER_LOADING = 'AOR/USER_REGISTER_LOADING'
export const USER_REGISTER_FAILURE = 'AOR/USER_REGISTER_FAILURE'
export const USER_REGISTER_SUCCESS = 'AOR/USER_REGISTER_SUCCESS'

export const userRegister = (data, basePath) => ({
    type: USER_REGISTER,
    payload: { data: { email: data.username, ...data } },
    meta: { resource: 'users', fetch: CREATE, auth: true },
})

//registerSaga.js
import { put, takeEvery, all } from 'redux-saga/effects'
import { push } from 'react-router-redux'
import { showNotification } from 'admin-on-rest'

import {
    USER_REGISTER,
    USER_REGISTER_LOADING,
    USER_REGISTER_SUCCESS,
    USER_REGISTER_FAILURE
} from './registerActions'

function* registerSuccess() {
    yield put(showNotification('Register approved'))
    yield put(push('/'))
}

function* registerFailure({ error }) {
    yield put(showNotification('Error: register not approved', 'warning'))
    console.error(error)
}

export default function* commentSaga() {
    yield all([
      takeEvery(USER_REGISTER_SUCCESS, registerSuccess),
      takeEvery(USER_REGISTER_FAILURE, registerFailure),
    ])
}

您可能必须制作自己的羽毛客户端,并针对此特定请求明确绕过对 authenticate 的调用

您还可以编写一个 rest wrapper,这将拦截针对此特定情况的调用并绕过身份验证

https://marmelab.com/admin-on-rest/RestClients.html#decorating-your-rest-client-example-of-file-upload

所以像下面这样

const restWrapper = requestHandler => (type, resource, params) => {
import { fetchUtils } from 'admin-on-rest';

if (type === 'CREATE' && resource === 'users') {
       return fetchUtils.fetchJson(url, params)
          .then((response) => {
           const {json} = response;
           return { data: json };
})


}

当您只想覆盖单个案例的默认行为时,无需重写整个 Rest Client