あなたがイデオロギー的なものと呼ばなければ、あなたには何もないので、そこにバグ自体を見つけることはできません。
テキストフィールドを使用する場合、実際にはパスワードをハッシュ化されたバージョンに書き換えることはありません。
これは、db 要素の実際のフィールドに関連しています。
new TextField('Password', _t('Dict.PASSWORD', 'Password'))
したがって、暗号化または復号化を特徴とする書き込みまたは読み取りをキャッチしていません。
それを機能させる1つの方法は、テキストフィールドをdbリレーションではないカスタムゲッター/セッターに直接バインドしてから、実際の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) データベースに新しいソルト フィールドを追加します。忘れずに /dev/build を実行してください。
static $db = array (
'Type' => 'Text',
'Username' => 'Text',
'Password' => 'Text',
'URL' => 'Text',
'Webadmin' => 'Text',
'Editable' => 'Text',
"Salt" => "Text"
);
ここで作成したソルトを使用するように get フィールドと set フィールドを修正しました。メンバーで見つかったものではありません。その時点で実際にはメンバー関係がない可能性があるため、$this->Member() が null である可能性があります。
「動作する」サンプルhttp://www.sspaste.com/paste/show/5257f7743cf0b