reactjs - 如何在提交事件中用另一个字段的值替换?
问题描述
在 React-Admin 中,在我们的注册表单 ( SimpleForm ) 上,为了提高安全性和用户的信任度,我们不希望我们的服务器以明文形式接收用户密码(即使我们使用 HTTPS)。
我们想用相关的 sha256 散列替换值 on-the-fly(在服务器端,我们存储这个散列的 bcrypt 版本)
从用户的角度来看,有一种解决方案可以在不改变 SimpleForm 中的值的情况下做到这一点吗?因为,如果服务器 API 在表单中返回错误,用户将再次提交表单,我们仍然需要翻译原始密码值。
问候,
解决方案
我还没有测试过,但你可能可以在输入组件上使用redux-formnormalize
的prop 。就像是:
const encryptPassword = (value, previousValue, allValues, previousAllValues) => {
// Encypt the password somehow
const encyptedPassword = ...;
return encyptedPassword
}
<TextInput type="password" normalize={encryptPassword} />
另一种选择是在将有效负载发送到您的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);
推荐阅读
- opengl - OpenGL over Windows Remote 的当前状态和解决方案
- textbox - 根据文本长度减小字体大小
- cordova - 无法从流星科尔多瓦应用程序连接到服务器
- node.js - 如何根据用户类型使用 node/express 提供不同的 css 文件?
- javascript - ExtJS - 当用户点击行时显示新标签
- c# - 如何对等待异步任务进行单元测试?
- sqlite - 如何在.import之后获取插入Sqlite3的记录数
- google-data-studio - 数据洞察社区连接器错误:数据中的列数与架构中的数字不匹配。
- laravel - 无法使用 Laradock 为 SSR 安装 v8js 扩展
- jquery - 如何在 MVC 中单击按钮时选中复选框?