この問題の原因となっている #3150 の修正が完了していない状態で修正を行うため、現時点での調査や報告されている現象からどのような不具合が発生しているか仮定して修正を行います。
- 仮定
- member/registerInput (GET) にて新規に登録するメンバーの情報を入力し「新規登録」ボタンが押される
- member/registerInput (POST) にて member_config テーブル内にある登録中のメンバーの pc_address_pre が pc_address に変更される (PCの場合)
- その後、opAuthMailAddress/registerEnd にリダイレクトされ登録中のメンバーの is_active が 1 にセットされるのが正常な動作であるが、「新規登録」ボタンの連打等によってこのページのロードが行われず is_active の値が 0 のままになった
上記の内容が正しければ pc_address_pre 及び mobile_address_pre が存在せず、かつ member.is_active が 0 のまま となっているメンバーが #3150 によって発生した不正なメンバー情報と推定できます。
is_acriveフラグが1(通常)の場合、「このページにはアクセスできません。」とエラーメッセージが表示されます。
is_acriveフラグが0(チケットの再現手順)の場合、「この登録用URLは携帯電話専用です。」とエラーメッセージが表示されます。
チケットに書かれている「この登録用URLは携帯電話専用です。」という出力は、下記のコードで sfView::ERROR が返されたときに表示されます。
(apps/pc_frontend/modules/opAuthMailAddress/actions/actions.class.php)
opActivateBehavior::disable();
$authMode = $memberConfig->getMember()->getConfig('register_auth_mode');
$pcAddressPre = $memberConfig->getMember()->getConfig('pc_address_pre');
opActivateBehavior::enable();
if ('MobileUID' === $authMode)
{
$authMode = 'MailAddress';
}
$this->forward404Unless($authMode === $this->getUser()->getCurrentAuthMode());
if (!$pcAddressPre)
{
return sfView::ERROR;
}
現時点での実装で sfView::ERROR が返されるのは pc_address_pre が存在しない 場合であり、この場合は「携帯電話専用の新規登録トークン」をPCからアクセスしようとしているものと判断するようです。
#3150 によって発生する不正なメンバーに対して「このページにはアクセスできません。」と表示するのであれば、
- pc_address_pre は存在しないが、mobile_address_pre は存在する (携帯用の登録トークンにPCからアクセス)
- => 「この登録用URLは携帯電話専用です。」と表示 (sfView::ERROR)
- pc_address_pre は存在せず、mobile_address_pre も存在しない (#3150 によって発生した不正なユーザー)
- => 「このページにはアクセスできません。」と表示 (foward404)
- pc_address_pre は存在する
として判定するのが妥当だと思います。この方法による修正案は note-1 の通りです。