如何在提交事件中用另一个字段替换字段的值?

时间:2018-08-24 09:32:58

标签: reactjs react-admin

在React-Admin的注册表单(SimpleForm)中,为了提高安全性和用户的信任度,我们不希望服务器以明文形式接收用户密码(即使我们使用的是HTTPS)

我们想用关联的sha256哈希值即时替换值(在服务器端,我们存储此哈希值的bcrypt版本)

有没有一个解决方案,从用户的角度来看,在SimpleForm中的值没有任何变化?因为,如果服务器API在表单中返回错误,则用户将再次提交表单,而我们仍然需要转换原始密码值。

此致

1 个答案:

答案 0 :(得分:1)

我还没有测试过,但是您可能可以在输入组件上使用redux-formnormalize道具。像这样:

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

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

另一种选择是在将有效负载发送到dataProvider中的API之前先对其进行转换。像这样:

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