在React-Admin的注册表单(SimpleForm)中,为了提高安全性和用户的信任度,我们不希望服务器以明文形式接收用户密码(即使我们使用的是HTTPS)
我们想用关联的sha256哈希值即时替换值(在服务器端,我们存储此哈希值的bcrypt版本)
有没有一个解决方案,从用户的角度来看,在SimpleForm中的值没有任何变化?因为,如果服务器API在表单中返回错误,则用户将再次提交表单,而我们仍然需要转换原始密码值。
此致
答案 0 :(得分:1)
我还没有测试过,但是您可能可以在输入组件上使用redux-form的normalize
道具。像这样:
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);