Bug(バグ) #2344
Shinichi Urabe さんが13年以上前に更新
h3. Overview (現象)
OpenPNE3.4.15-devで、携帯で新規登録ができない。
新規登録リンクをクリックし、opAuthMailAddress/requestRegisterURLのページから登録ページのURLを取得しようとすると、「サーバーが混み合っています」というエラーメッセージが携帯メールに届く。
h3. 再現バージョン
* OpenPNE3.4.13 〜 OpenPNE3.4.15-dev
* opAuthMailAddressPlugin 1.2.1
その他のバージョンでは再現しません。
h3. 再現手順
# 管理画面のopAuthMailAdressPluginの設定で招待モードの設定を「招待なしでの登録を許可する」にする
# 携帯でログイン画面にアクセスする
# 新規登録リンクをクリックし、opAuthMailAddress/requestRegisterURLのページにアクセスする
# メールで登録のリンクをクリックし登録ページのURLを取得するメールを送る
# エラーメッセージが届く
h3. Causes (原因)
新規登録時に plugins/opAuthMailAddressPlugin/apps/mobile_mail_frontend/modules/opAuthMailAddress/actions/actions.class.php から InviteForm が呼ばれるが InviteForm::save() を実施された際に 143行目に以下のような処理が存在する。しかしながら #2044 で myUser クラスの親クラスを sfOpenPNESecurityUser から sfBasicSecurityUser に変更されたことにより、getMemberId() は定義されていないため、この処理でエラーとなってしまう
* OpenPNE 3.6 用の opAuthMailAddressPlugin では InviteForm クラスは呼ばれず、構造自体異なるため、3.4.15-dev で発生するような問題はない
* OpenPNE 3.2 については myUser クラスの親クラスは fOpenPNESecurityUser であるので問題はでない
<pre>
$this->member->setInviteMemberId($user->getMemberId());
</pre>
h3. Way to fix (修正内容)
* InviteForm::save() 処理内、$user オブジェクトが sfOpenPNESecurityUser であれば、上記処理を実施するように分岐を追記する
* 管理画面の AdminInviteForm クラスは InviteForm クラスを親クラスとして扱っているが、save() メソッドはオーバーライドされているので、Member::setInviteMemberId() が呼ばれることがないので上記修正で問題はでないと考えられる
* Member::setInviteMemberId() に紹介者のIDをセットする場合は、いずれの場合も、sfUser::getMemberId() が呼べる処理の流れになっているため、上記修正で問題ないと考える