前提・実現したいこと
CakePHP3.5.16でメールアドレスを暗号化してemailというカラム名でMySQLに保存しています。
同じメールアドレスの追加を試みた際にbuildRulesのisUniqueで重複登録の場合はエラーを表示させたいと考えています。
発生している問題・エラーメッセージ
既に登録済みのメールアドレスを登録しようとすると、そのまま登録されてしまいます。
該当のソースコード
Table
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->isUnique(['email'],'※指定されたメールアドレスは既に使用されています'));
return $rules;
}
controller
if ($this->Users->save($user))
{
(省略)
}
Entity
public function _defaultEncrypt($value)
{
return Security::encrypt(trim($value), $this->defaultKey,'samplesalt');
}
public function _defaultDecrypt($name, $value)
{
return $this->dirty($name) ?
$value :
Security::decrypt(trim($value), $this->defaultKey,'samplesalt');
}
protected function _setEmail($value)
{
if ($value)
{
return $this->_defaultEncrypt($value);
}
}
protected function _getEmail($value)
{
if ($value)
{
return $this->_defaultDecrypt('email', $value);
}
}
試したこと
1.メールアドレスを平文で保存。⇒ ちゃんとエラー表示されました。
2.同一メールアドレス、同一キー、同一salt値で暗号化 ⇒ 暗号化する度に異なる値となり、異なるメールアドレス扱いで、同一のメールアドレスが保存されてしまいました。
あなたの回答
tips
プレビュー