Bug(バグ) #3150
Youichi Kimura がほぼ7年前に更新
h3. 現象
OpenPNEでは認証機構が複数持てるようになっており、この関係でメンバー登録時には
1. メンバー情報の登録
2. 汎用的なアカウントの有効化
という2つの処理を行なっています。
PCのメールアドレスで認証を行う設定の場合は、1においてフォームからの情報入力が行われます。
2のアカウントの有効化処理は汎用処理となっており、1の処理が不要であったり、外部Webサービスと連携のためにフォーム入力不要となるような運用形態においても利用できるような設計となっております。
ただし、ブラウザからの2重フォーム送信やネットワークの状態等、サーバーの外部の要因によってデータが不正な状態になってしまいます。
具体的な現象の例として、 opAuthMailAddressPlugin を利用していて、プロフィール登録時にsubmitボタンを複数回押下すると、 is_active=0 のメンバーが作成されてしまうことがあります。
h3. 原因
@member/registerInput@ のフォームで「新規登録」ボタンを複数回クリックした場合に、@POST /member/registerInput@ のリクエストが重複して行われる事で 2 回目以降のリクエストが 404 エラーとなることによるもの。
これにより、本来は最初の @POST /member/registerInput@ のリクエストで @opAuthMailAddress/registerEnd@ にリダイレクトされるべき所が、ブラウザ上では 2 回目以降にレスポンスとして返ってきた 404 エラーの表示のまま止まってしまい、登録が完了しない。
(@/opAuthMailAddress/registerEnd/token/...@ の URL を手動で入力して表示すると続行できる)
h3. 修正内容
@member/registerInput@ の「新規登録」ボタンを複数回クリックできないように JavaScript で二重送信を抑制する。
OpenPNEでは認証機構が複数持てるようになっており、この関係でメンバー登録時には
1. メンバー情報の登録
2. 汎用的なアカウントの有効化
という2つの処理を行なっています。
PCのメールアドレスで認証を行う設定の場合は、1においてフォームからの情報入力が行われます。
2のアカウントの有効化処理は汎用処理となっており、1の処理が不要であったり、外部Webサービスと連携のためにフォーム入力不要となるような運用形態においても利用できるような設計となっております。
ただし、ブラウザからの2重フォーム送信やネットワークの状態等、サーバーの外部の要因によってデータが不正な状態になってしまいます。
具体的な現象の例として、 opAuthMailAddressPlugin を利用していて、プロフィール登録時にsubmitボタンを複数回押下すると、 is_active=0 のメンバーが作成されてしまうことがあります。
h3. 原因
@member/registerInput@ のフォームで「新規登録」ボタンを複数回クリックした場合に、@POST /member/registerInput@ のリクエストが重複して行われる事で 2 回目以降のリクエストが 404 エラーとなることによるもの。
これにより、本来は最初の @POST /member/registerInput@ のリクエストで @opAuthMailAddress/registerEnd@ にリダイレクトされるべき所が、ブラウザ上では 2 回目以降にレスポンスとして返ってきた 404 エラーの表示のまま止まってしまい、登録が完了しない。
(@/opAuthMailAddress/registerEnd/token/...@ の URL を手動で入力して表示すると続行できる)
h3. 修正内容
@member/registerInput@ の「新規登録」ボタンを複数回クリックできないように JavaScript で二重送信を抑制する。