因爲從3dgoo這裏巨大的幫助Store Sensitive Data in Silverstripe 我能創造這個數據對象存儲ClientPasswords - >http://www.sspaste.com/paste/show/5257a5ccdf990SilverStripe密碼DE /加密不起作用
的問題是,與getCMSFields創建域之後, de /和加密不再工作,密碼以明文形式存儲在數據庫中:/
有人可以幫我解決它嗎?錯誤在哪裏?
因爲從3dgoo這裏巨大的幫助Store Sensitive Data in Silverstripe 我能創造這個數據對象存儲ClientPasswords - >http://www.sspaste.com/paste/show/5257a5ccdf990SilverStripe密碼DE /加密不起作用
的問題是,與getCMSFields創建域之後, de /和加密不再工作,密碼以明文形式存儲在數據庫中:/
有人可以幫我解決它嗎?錯誤在哪裏?
我不能在那裏發現一個bug,因爲你沒有,如果你不打電話給一個意識形態。
當您使用文本字段時,您實際上並沒有將密碼重寫到哈希版本的任何位置。
這涉及到實際現場的分貝元素:
new TextField('Password', _t('Dict.PASSWORD', 'Password'))
所以你不要再追寫或讀功能的crypting或解密。
使其工作的一種方法是將文本字段綁定到不是直接與db關係的自定義getter/setter,然後獲取並設置實際的db字段。
該樣品是:
1)添加字段作爲這樣
$fields->addFieldToTab("Root.Main", new TextField('CusotomgetterSetter', "Set the password")
2)創建的設置器對類:
public function setCusotomgetterSetter($value){
if(!$this->Salt){
$this->Salt = uniqid(mt_rand());
}
$test = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($this->Salt), $value, MCRYPT_MODE_CBC, md5(md5($this->Salt))));
$this->Password = $test;
}
public function getCusotomgetterSetter(){
return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($this->Salt), base64_decode($this->Password), MCRYPT_MODE_CBC, md5(md5($this->Salt))), "\0");
}
3)添加新的鹽字段到db,記得運行/ dev/build
static $db = array (
'Type' => 'Text',
'Username' => 'Text',
'Password' => 'Text',
'URL' => 'Text',
'Webadmin' => 'Text',
'Editable' => 'Text',
"Salt" => "Text"
);
我修改了get和set字段來使用這裏創建的salt。不是在會員中找到的人,因爲在這一點上我們實際上不會實際上是成員關係,因此$ this-> Member()可能爲空。
我試過這樣。但是結果是一個空字段'\t public function onBeforeWrite(){} this-> Member() - > Salt),base64_decode($ this->密碼),MCRYPT_MODE_CBC,md5(md5($ this-> Member() - > Salt))),「\ 0」); \t \t parent :: onBeforeWrite(); \t}' – invictus
下面是完整的代碼http://www.sspaste.com/paste/show/5257c96b0f929 – invictus
你可以使用onbefore寫,但有一個更簡單的方法,生病發布它作爲答案:) –
'在哪裏'的錯誤:在哪裏?代碼第一? –
閱讀! ;)在我的問題中有兩個鏈接;) – invictus