プロジェクト

全般

プロフィール

Bug(バグ) #2344

Shinichi Urabe12年以上前に更新

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() getCurrentAuthMode() は定義されていないため、この処理でエラーとなってしまう

* OpenPNE 3.6 用の opAuthMailAddressPlugin では InviteForm クラスは呼ばれず、構造自体異なるため、3.4.15-dev で発生するような問題はない
* OpenPNE 3.2 については mobile_mail_frontend アプリケーションの myUser クラスの親クラスは fOpenPNESecurityUser であるので問題はでない

<pre>
$this->member->setInviteMemberId($user->getMemberId());
$this->member->setConfig('register_auth_mode', $this->getOption('authMode', $user->getCurrentAuthMode()));
</pre>

h3. Way to fix (修正内容)

* InviteForm::save() 処理内、$user オブジェクトが sfOpenPNESecurityUser でなければ、$user->getMemberId() であれば、$user->getMemberId() $user->getCurrentAuthMode() から値を取得する必要のある処理をさせない修正を実施する

* 管理画面の AdminInviteForm クラスは InviteForm クラスを親クラスとして扱っているが、save() メソッドはオーバーライドされているので、Member::setInviteMemberId() が呼ばれることがないので上記修正で問題はでないと考えられる
* Member::setInviteMemberId() に紹介者のIDをセットする場合は、いずれの場合も、sfUser::getMemberId() が呼べる処理の流れになっているため、上記修正で問題ないと考える

戻る