操作
Bug(バグ) #1815
完了既に新規登録申請を行ったアドレスで2度目に新規登録申請を行うとInternal Server Errorになる
開始日:
2010-11-28
期日:
進捗率:
100%
予定工数:
3.6 で発生するか:
Yes
[QA]バグ通知済:
いいえ
3.8 で発生するか:
説明
Overview (現象)¶
管理画面のopAuthMailAddressPluginで招待モードを「招待なしでの登録を許可する」にした際に可能になる新規登録にて、1度新規登録申請を行い、本登録をせずにそのままにしている場合、2度目の新規登録申請を行うとエラーになります。
エラーは以下の通りです。
500 | Internal Server Error | Doctrine_Connection_Mysql_Exception SQLSTATE: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`openpne3`.`member_config`, CONSTRAINT `member_config_member_id_member_id` FOREIGN KEY (`member_id`) REFERENCES `member` (`id`) ON DELETE CASCADE)
Causes (原因)¶
opRequestRegisterURLForm::validateAddress() で member_config に 'pc_address_pre' が存在していた場合、
その MemberConfig オブジェクトから Member オブジェクトを取得するような処理が入ってる。
$this->member = $config->getMember();
しかし、このままではActivateビヘイビアが有効であるため、
レコードが取得できていない状態となっている。(新規登録の状態ではis_active=0であるため、但しオブジェクトの取得自体はできている)
結果的に opRequestRegisterURLForm::sendMail() で
$member->setConfig('pc_address_pre', $address);
としたときに、id が null の状態であるため、レコードの挿入に失敗している。
Way to fix (修正内容)¶
MemberConfig::getMember() する際に、Activateビヘイビアを無効にする。
$activation = opActivateBehavior::getEnabled(); opActivateBehavior::disable(); $this->member = $config->getMember(); if ($activation) { opActivateBehavior::enable(); }
操作