Как заменить значение поля другим при отправке события? - PullRequest
0 голосов
/ 24 августа 2018

В React-Admin, в нашей форме регистрации (SimpleForm), чтобы повысить безопасность и доверие наших пользователей, мы не хотим, чтобы наш сервер получал пароль пользователя в виде открытого текста (даже если мы находимся в HTTPS) .

Мы хотели бы заменить значение «на лету» на связанный хэш sha256 (на стороне сервера мы храним версию этого хэша в bcrypt)

Есть ли решение сделать это без какого-либо изменения значения в SimpleForm с точки зрения пользователя? Потому что, если серверный API возвращает ошибку в форме, пользователь повторно отправит форму еще раз, и нам все еще нужно будет перевести исходное значение пароля.

С уважением,

1 Ответ

0 голосов
/ 30 августа 2018

Я не тестировал его, но вы, вероятно, можете использовать normalize prop redux-form на компоненте ввода. Что-то вроде:

const encryptPassword = (value, previousValue, allValues, previousAllValues) => {
    // Encypt the password somehow
    const encyptedPassword = ...;
    return encyptedPassword
}

<TextInput type="password" normalize={encryptPassword} />

Другим вариантом будет преобразование полезной нагрузки перед отправкой ее в ваш API в вашем dataProvider. Что-то вроде:

// in src/dataProvider.js
import dataProvider from 'ra-data-simple-rest';

// defaultDataProvider is your original dataProvider which we decorate here
const addEncryption = defaultDataProvider => (fetchType, resource, params) => {
    let finalParams = params;

    if (resource === 'users' && fetchType === 'CREATE') {
        finalParams = {
            ...params,
            password: encryptPassword(params.password),
        };
    }

    return defaultDataProvider(fetchType, resource, finalParams);
}

export default addEncryption(dataProvider);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...