设置系统配置字段的默认值是很好理解的(来自@alan storm的Chapagain和blog post)但密码字段不同,因为它们在保存到数据库时会被加密。因此,当Magento从config.xml读取默认值时,它会尝试解密该值,如果默认值是明文,则会失败。
是否有XML帮助程序或进程(除了使用$setup->setConfigData('config/path/here', md5('default'))
创建安装脚本之外)来指定这些默认值?
答案 0 :(得分:3)
我不是100%肯定(这是一个快速grep
),但我认为密码加密发生在
File: app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Encrypted.php
protected function _beforeSave()
{
$value = (string)$this->getValue();
// don't change value, if an obscured value came
if (preg_match('/^\*+$/', $this->getValue())) {
$value = $this->getOldValue();
}
if (!empty($value) && ($encrypted = Mage::helper('core')->encrypt($value))) {
$this->setValue($encrypted);
}
}
请记住,这是加密,而不是哈希。由于您存储密码以便在某处使用(支付API最常用),因此Magento需要能够解读已被扰乱的内容。因此,您可以使用核心助手的encrypt
方法生成这些值。你也可以试试这样的东西
$o = Mage::getModel('adminhtml/system_config_backend_encrypted');
$o->setData('value','encrypted or unencrypted value');
$o->beforeSave(); //to encrypt the value
$o->afterLoad(); //to unencrypted the value
$password = $o->getValue(); //fetch the value
请记住,每个商店都有自己的加密密钥,因此这对于分发模块没有用。
您还应该在config.xml
加载和处理中查看backend_model
属性(自我链接免责声明,未在互联网上的任何其他位置记录)。
希望有所帮助。
答案 1 :(得分:2)
这是一个有趣的问题/思想实验,但目前的行为似乎是合理的。如果值的数据存储需要加密,我无法想象在文件系统中的任何位置以纯文本形式存在功能值,无论是在config.xml中还是在安装/升级脚本中。
唯一的另一个选择,自己加密,可能是不可取的,因为你必须分发,因此要知道密钥的价值。