【问题标题】:How to replace the value of a field by another on submit event?如何在提交事件中用另一个字段的值替换?
【发布时间】:2018-08-24 09:32:57
【问题描述】:

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

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

从用户的角度来看,有没有一种解决方案可以在不改变 SimpleForm 中的值的情况下做到这一点?因为,如果服务器 API 在表单中返回错误,用户将再次提交表单,我们仍然需要翻译原始密码值。

问候,

【问题讨论】:

    标签: reactjs react-admin


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2013-01-13
      • 1970-01-01
      • 2023-01-19
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      相关资源
      最近更新 更多