操作
Backport(バックポート) #2410
完了opAuthRegisterFormMailAddress::doSave()の$memberConfig->setName()の処理で、レコードの存在チェックがない
開始日:
2010-10-09
期日:
進捗率:
100%
予定工数:
説明
詳細¶
opAuthRegisterFormMailAddressクラスのdoSave()メソッドで、事前に登録されたメールアドレス(mobile_address_preまたはpc_address_pre)を正式なアドレス(mobile_addressまたはpc_address)に付け替える(member_configレコードのnameを変更する)処理を行っているが、mobileアプリケーションの場合はmobile_address_pre、そうでない場合はpc_address_preのレコードが存在する前提のコードになっている。
例えば以下のような(割と容易な)手順で、mobileアプリケーションからの登録にもかかわらずmobile_address_preが存在しないという状況になる
- 管理画面からPC系メールアドレス(gmailなど)宛に招待を送る
- 招待を受け取ったユーザーが、メールを携帯に転送する
- 携帯でメンバー登録URLにアクセス
- そのまま携帯からメンバー登録フォームを送信
- エラーになり登録できない(画面にはエラーとは表示されない)
提案¶
コアの仕様、ポリシー(セキュリティ)に関連するため、根本的な対処はこのチケットの範囲外になってしまうと思いますが、いくつか考慮が必要な点を書いておきます。
- そもそも説明に書いたような手順を許可するのかどうか
- 次の項目とも関連
- 説明に書いたような手順で携帯から登録ができても、設定によっては携帯からはログインできない、という挙動にするのか
なお、暫定的な対処方法は、$memberConfig->setName の前に$memberConfigのnullチェックを行い、nullであればエラーとするよう修正することです。
(この時点ではなく、登録フローのもう少し前でエラーになった方が親切でしょうけれど、それには上に書いたような仕様の検討が必要でしょうし)
操作