プロジェクト

全般

プロフィール

Bug(バグ) #2340

重複登録しないように修正する前の環境で送信した招待メールでは重複登録が可能になってしまっている

Yuya Watanabe12年以上前に追加. 8年以上前に更新.

ステータス:
Fixed(完了)
優先度:
High(高め)
担当者:
対象バージョン:
開始日:
2011-08-03
期日:
進捗率:

100%

3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

概要

#1816 「管理画面 招待メール送信 を利用すると同じメールアドレスを重複登録できる」
での修正により、修正後に送信されたメールに記載されているURLでは重複登録ができないようになっている。
しかし、修正前に送信したメールのURLについては修正後でも重複登録が可能となっており、対処がなされていない。

そのため、修正前に送信されたメールのURLについても重複登録を行えないように対処を行う必要がある。

再現手順

  1. #1816の修正を行う前の環境で下記を行う
    1. 管理画面でメールアドレスAに招待メールを送る -> 招待状1
    2. 管理画面で同じメールアドレスAに招待メールを送る -> 招待状2
  2. 現在メールアドレスAで2通受信されていることを確認する
  3. 修正を施して現在修正後の環境で以下を行う
    1. 招待状1から会員登録
      →member id 2にて登録完了 # 期待される結果ではない
    2. ログアウトせずに招待状2から会員登録画面を表示
    3. 登録完了
      →member id 3にて登録完了

確認バージョン

OpenPNE3.7.0-dev, OpenPNE3.4.15-dev

原因

メンバ登録時に,招待メールに記載されたURLのトークンが有効であるかどうかを確認する実装がない.

修正方針

note-8より,同pc_address_preのvalueを持つregister_tokenのupdated_atが最新であるとき,あるメールアドレスで登録しようとしてるもののうち最新のトークンであるものが得られると考えられる.
そのため,招待メールに記載されたURLが有効かどうかについてもこのトークンの更新時間によって判定することを考える.

修正内容

招待メールに記載されたURLをクリックした際にトークンが有効かどうかを確認する実装を追加した.
具体的には,URLに付与されたトークンがメンバ情報にあるメールアドレスが複数あるうちで最も新しいトークンかどうかを確認している.


関連するチケット

関連している OpenPNE 3 - Bug(バグ) #1816: 管理画面 招待メール送信 を利用すると同じメールアドレスを重複登録できる Fixed(完了) 2010-11-28
関連している OpenPNE 3 - Backport(バックポート) #2369: 重複登録しないように修正する前の環境で送信した招待メールでは重複登録が可能になってしまっている Fixed(完了) 2011-08-03
関連している OpenPNE 3 - Bug(バグ) #2588: 3.6RC1以降、仮登録時にメールアドレスが登録されないと新規登録がおこなえない Fixed(完了) 2011-11-08

関係しているリビジョン

リビジョン e9b1c7a1 (差分)
Yuya Watanabe12年以上前に追加

(fixes #2340) fixed to use latest token with pre-registered mail address

リビジョン 8b2cc07e (差分)
Yuya Watanabe12年以上前に追加

(refs #2340) fixed for coding standard

リビジョン 58eca9d7 (差分)
Yuya Watanabe12年以上前に追加

(refs #2340) fixed to make registration complete

リビジョン 18105249 (差分)
Yuya Watanabe12年以上前に追加

(fixes #2340) fixed to use the latest token with registered mail address

リビジョン 24b6a085 (差分)
Yuya Watanabe12年以上前に追加

(fixes #2340) fixed to use name_value_hash column to find mail address

履歴

#1 Minoru Takai12年以上前に更新

問題が不明瞭なのでチケットに対してコメントします。

チケットに書かれている内容

概要

#1816 「管理画面 招待メール送信 を利用すると同じメールアドレスを重複登録できる」
での修正により、修正後に送信されたメールに記載されているURLでは重複登録ができないようになっている。
しかし、修正前に送信したメールのURLについては修正後でも重複登録が可能となっており、対処がなされていない。

そのため、修正前に送信されたメールのURLについても重複登録を行えないように対処を行う必要がある。

再現手順

  1. #1816の修正を行う前の環境で下記を行う
    1. 管理画面でメールアドレスAに招待メールを送る -> 招待状1
    2. 管理画面で同じメールアドレスAに招待メールを送る -> 招待状2
  2. 現在メールアドレスAで2通受信されていることを確認する
  3. 修正を施して現在修正後の環境で以下を行う
    1. 招待状1から会員登録
      →member id 2にて登録完了 # 期待される結果ではない
    2. ログアウトせずに招待状2から会員登録画面を表示
    3. 登録完了
      →member id 3にて登録完了

上記に対して

#1816 「管理画面 招待メール送信 を利用すると同じメールアドレスを重複登録できる」での修正により、修正後に送信されたメールに記載されているURLでは重複登録ができないようになっている。しかし、修正前に送信したメールのURLについては修正後でも重複登録が可能となっており、対処がなされていない。

「修正後に送信されたメールに記載されているURLでは重複登録ができないようになっている」のではなく、「修正後には招待状が送信されないようになっている」のではないでしょうか。

  1. #1816の修正を行う前の環境で下記を行う
    1. 管理画面でメールアドレスAに招待メールを送る -> 招待状1
    2. 管理画面で同じメールアドレスAに招待メールを送る -> 招待状2
  2. 現在メールアドレスAで2通受信されていることを確認する
  3. 修正を施して現在修正後の環境で以下を行う
    1. 招待状1から会員登録
      →member id 2にて登録完了 # 期待される結果ではない
    2. ログアウトせずに招待状2から会員登録画面を表示
    3. 登録完了
      →member id 3にて登録完了

「管理画面でメールアドレスAに招待メールを送る -> 招待状1」の前提として、メールアドレスAが既に登録されたメンバーの有効なメールアドレスであるという条件が必要ではないでしょうか。

そうであれば、「member id 2にて登録完了」することはあり得ず、期待される結果でないのは「招待状1から会員登録」および「招待状2から会員登録」が成功してしまうことだと思います。(なお、ログアウトせずに招待状2への操作を手順として示していますが、ログアウトせずに操作する必要はないと思います。)

#2 Yuya Watanabe12年以上前に更新

問題について補足します.
メールアドレスの状態としては以下の3つが挙げられると思います。この場合の招待メールというのは「管理画面から」「新規登録から」「メンバによる招待から」のいずれのメールも含みます。
  • 状態1 SNS未登録の状態であり招待メールが送信されていない
  • 状態2 SNS未登録状態であり招待メールが送信されている
  • 状態3 SNS登録状態である
それぞれの状態で招待メールが送信されるかどうかの挙動について以下のようになります。
  • 状態1 SNS未登録の状態であり招待メールが送信されていない
    → メールが送信される
  • 状態2 SNS未登録状態であり招待メールが送信されている
    → メールが送信される
  • 状態3 SNS登録状態である
    → メールが送信されない

このチケットではまず状態1で送信されたメールを招待状1とし、状態2で送信されたメールを招待状2としています。
状態3からメールが送信されないのは#1816 修正以前からの挙動であると認識しています。
#1816 では状態1および状態2で管理画面から送信された2通以上の招待状のうち、最新の招待状以外からの会員登録が行えないように修正を行っています。

指摘に関して

Minoru Takai は書きました:

#1816 「管理画面 招待メール送信 を利用すると同じメールアドレスを重複登録できる」での修正により、修正後に送信されたメールに記載されているURLでは重複登録ができないようになっている。しかし、修正前に送信したメールのURLについては修正後でも重複登録が可能となっており、対処がなされていない。

「修正後に送信されたメールに記載されているURLでは重複登録ができないようになっている」のではなく、「修正後には招待状が送信されないようになっている」のではないでしょうか。

この問題では状態1および状態2のメールアドレスについて言及しています。そして「修正後には招待状が送信されないようになっている」挙動は状態3における挙動であり、今回報告した動作の中には含まれていないと考えています。よって、

「管理画面でメールアドレスAに招待メールを送る -> 招待状1」の前提として、メールアドレスAが既に登録されたメンバーの有効なメールアドレスであるという条件が必要ではないでしょうか。

と述べられている部分は前提として状態1あるいは状態2であるべきことが挙げられます。この点については説明が不十分であったと思います。

そうであれば、「member id 2にて登録完了」することはあり得ず、期待される結果でないのは「招待状1から会員登録」および「招待状2から会員登録」が成功してしまうことだと思います。(なお、ログアウトせずに招待状2への操作を手順として示していますが、ログアウトせずに操作する必要はないと思います。)

この部分に関しては、#1816 の修正において招待状1でのURLが無効になり「このページにはアクセスできません。」と表示される挙動になります。そのため、「招待状1からの会員登録」が成功することが期待された結果ではなく、また「招待状2からの会員登録」が成功することに関しては期待された結果であると考えられます。
ログアウトについては自身での動作確認を行っていないため言及を控えます。

指摘を踏まえて

指摘内容に関して不明瞭だった部分および期待された挙動とは違う挙動である部分についてチケット内容の修正を行うことを考えています。
現時点では不明瞭だった部分については確認しましたが、期待された挙動とは違う挙動である部分は確認されていないという認識です。

#3 Shingo Yamada12年以上前に更新

  • 優先度Normal(通常) から High(高め) に変更

#4 Shingo Yamada12年以上前に更新

  • 360対象RC1 にセット

#5 Shingo Yamada12年以上前に更新

  • 担当者Yuya Watanabe にセット

#6 Yuya Watanabe12年以上前に更新

  • ステータスNew(新規) から Accepted(着手) に変更

#7 Yuya Watanabe12年以上前に更新

動作確認

内容

#1816 の修正以前の動作について確認する.具体的には,2通の招待状をPCメールで送信し,それぞれに記載されているURLのページに遷移したときの動作を確認する.その際,招待状を送る方法として「管理画面から」「新規登録から」「メンバによる招待から」の3つの方法を2通の招待状について網羅的に確認する.ただし,この確認では登録完了までの動作を行っていないため関連元チケットの動作を保証するものではない.

目的

本チケットにおける問題のみの修正が行われているかどうかを確認する材料とする.

確認バージョン

OpenPNE 3.7.0-dev
  • 確認結果1 #1816 の修正を反映していない
  • 確認結果2 #1816 の修正を反映している
opAuthMailAddressPlugin 1.3.2
  • #1815 の問題により確認不可能となる部分が存在するため,1.3.2に対して #1815 の修正を施しているものとする.

確認結果1

  1. 1通目 管理画面 2通目 管理画面 (本チケットの問題に該当)
    1. 登録画面へ遷移
    2. 登録画面へ遷移
  2. 1通目 管理画面 2通目 新規登録
    1. 登録画面へ遷移
    2. プロフィール入力画面へ遷移
  3. 1通目 管理画面 2通目 メンバ招待
    1. 登録画面へ遷移
    2. 登録画面へ遷移
  4. 1通目 新規登録 2通目 管理画面
    1. プロフィール入力画面へ遷移
    2. 登録画面へ遷移
  5. 1通目 新規登録 2通目 新規登録
    1. 404
    2. プロフィール入力画面へ遷移
  6. 1通目 新規登録 2通目 メンバ招待
    1. 404
    2. 登録画面へ遷移
  7. 1通目 メンバ招待 2通目 管理画面
    1. 登録画面へ遷移
    2. 登録画面へ遷移
  8. 1通目 メンバ招待 2通目 新規登録
    1. 404
    2. プロフィール入力画面へ遷移
  9. 1通目 メンバ招待 2通目 メンバ招待
    1. 404
    2. 登録画面へ遷移

確認結果2

  1. 1通目 管理画面 2通目 管理画面 (本チケットの問題に該当)
    1. 404
    2. 登録画面へ遷移
  2. 1通目 管理画面 2通目 新規登録
    1. 404
    2. プロフィール入力画面へ遷移
  3. 1通目 管理画面 2通目 メンバ招待
    1. 404
    2. 登録画面へ遷移
  4. 1通目 新規登録 2通目 管理画面
    1. 404
    2. 登録画面へ遷移
  5. 1通目 新規登録 2通目 新規登録
    1. 404
    2. プロフィール入力画面へ遷移
  6. 1通目 新規登録 2通目 メンバ招待
    1. 404
    2. 登録画面へ遷移
  7. 1通目 メンバ招待 2通目 管理画面
    1. 404
    2. 登録画面へ遷移
  8. 1通目 メンバ招待 2通目 新規登録
    1. 404
    2. プロフィール入力画面へ遷移
  9. 1通目 メンバ招待 2通目 メンバ招待
    1. 404
    2. 登録画面へ遷移

まとめ

確認結果より, #1816 の修正によってURLのリンクをクリックしたときに発生する遷移としては「任意の方法で送られた招待状に関して,最新のもの以外の遷移先を404にする」ことで #1816 の修正と同等の対処となると考えられる.すなわち,本チケットでは今回の修正によって確認結果2と同等の結果が得られることを目的とする.

#8 Yuya Watanabe12年以上前に更新

note-7における確認結果1のmember_configテーブルデータの変化を以下に示す.

  • 1通目 管理画面 2通目 管理画面 ふたつメンバできる
mysql> select * from member_config where member_id='75';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 379 |        75 | pc_address_pre     | a2010972@nepwk.com                 | NULL           | 177ba7fd6ec99b2117241c5796fb8ae4 | 2011-08-29 17:26:55 | 2011-08-29 17:26:55 |
| 380 |        75 | pc_address_token   | caf52dd281b512c4127df0ea281577a8   | NULL           | 7b00a851dfe2274a49bdd5c5b631a30e | 2011-08-29 17:26:55 | 2011-08-29 17:26:55 |
| 381 |        75 | register_token     | 75cb6d24bfd6d6c4694ef15c3154b51838 | NULL           | b6bd28691ab406df8f215bb218632756 | 2011-08-29 17:26:55 | 2011-08-29 17:26:55 |
| 382 |        75 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:26:56 | 2011-08-29 17:26:56 |
| 383 |        75 | is_admin_invited   | 1                                  | NULL           | eb60f13757f1516e0031606640744834 | 2011-08-29 17:26:56 | 2011-08-29 17:26:56 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

mysql> select * from member_config where member_id='76';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 384 |        76 | pc_address_pre     | a2010972@nepwk.com                 | NULL           | 177ba7fd6ec99b2117241c5796fb8ae4 | 2011-08-29 17:27:38 | 2011-08-29 17:27:38 |
| 385 |        76 | pc_address_token   | 38aff5d5aede07b380609ba9f942087a   | NULL           | 0b1408078f85472695d968f3eae2fd02 | 2011-08-29 17:27:38 | 2011-08-29 17:27:38 |
| 386 |        76 | register_token     | 766f0fe749bb86783cce05db6117316cc6 | NULL           | c523a0f056a0144aadd0da1a3162ebc5 | 2011-08-29 17:27:38 | 2011-08-29 17:27:38 |
| 387 |        76 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:27:39 | 2011-08-29 17:27:39 |
| 388 |        76 | is_admin_invited   | 1                                  | NULL           | eb60f13757f1516e0031606640744834 | 2011-08-29 17:27:39 | 2011-08-29 17:27:39 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
  • 1通目 管理画面 2通目 新規登録

最初でメンバができて後でregister_tokenが更新される

mysql> select * from member_config where member_id='77';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 389 |        77 | pc_address_pre     | a2011160@nepwk.com                 | NULL           | 499963b30ab789678c96974f0fcd03d2 | 2011-08-29 17:29:23 | 2011-08-29 17:29:23 |
| 390 |        77 | pc_address_token   | 43ebcf78f9a82da8d9d320cf6ff39a12   | NULL           | 90613771ba6baea9b8252b81576bfebc | 2011-08-29 17:29:23 | 2011-08-29 17:29:23 |
| 391 |        77 | register_token     | 77b0df46257e7bdaad7cf02f9e25b401c6 | NULL           | 99d0f45e16bd9440f8bc5a547baf2e86 | 2011-08-29 17:29:23 | 2011-08-29 17:29:23 |
| 392 |        77 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:29:24 | 2011-08-29 17:29:24 |
| 393 |        77 | is_admin_invited   | 1                                  | NULL           | eb60f13757f1516e0031606640744834 | 2011-08-29 17:29:24 | 2011-08-29 17:29:24 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

mysql> select * from member_config where member_id='77';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 389 |        77 | pc_address_pre     | a2011160@nepwk.com                 | NULL           | 499963b30ab789678c96974f0fcd03d2 | 2011-08-29 17:29:23 | 2011-08-29 17:29:23 |
| 390 |        77 | pc_address_token   | 43ebcf78f9a82da8d9d320cf6ff39a12   | NULL           | 90613771ba6baea9b8252b81576bfebc | 2011-08-29 17:29:23 | 2011-08-29 17:29:23 |
| 391 |        77 | register_token     | 7728920a3e3658fd1d6a6efe553837bf98 | NULL           | a4666a0f643ec4fdac6881a3d8c15999 | 2011-08-29 17:29:23 | 2011-08-29 17:30:08 |
| 392 |        77 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:29:24 | 2011-08-29 17:29:24 |
| 393 |        77 | is_admin_invited   | 1                                  | NULL           | eb60f13757f1516e0031606640744834 | 2011-08-29 17:29:24 | 2011-08-29 17:29:24 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

  • 1通目 管理画面 2通目 メンバ招待

最初でメンバができて後でpc_address_tokenとregister_tokenが更新される

mysql> select * from member_config where member_id='79';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 399 |        79 | pc_address_pre     | a2011359@nepwk.com                 | NULL           | f5aa438d64e1dd601eb2d8cfee14eb87 | 2011-08-29 17:32:22 | 2011-08-29 17:32:22 |
| 400 |        79 | pc_address_token   | 4c787cf20060ec68da7738dd9d27d412   | NULL           | 6d6c81704ebae736cd0905f6e46c5d59 | 2011-08-29 17:32:22 | 2011-08-29 17:32:22 |
| 401 |        79 | register_token     | 79c95d43560cd1fa5a55c1276a161833ae | NULL           | 05c2f7e3c92e4a1375c91a892083def6 | 2011-08-29 17:32:22 | 2011-08-29 17:32:22 |
| 402 |        79 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:32:23 | 2011-08-29 17:32:23 |
| 403 |        79 | is_admin_invited   | 1                                  | NULL           | eb60f13757f1516e0031606640744834 | 2011-08-29 17:32:24 | 2011-08-29 17:32:24 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

mysql> select * from member_config where member_id='79';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 399 |        79 | pc_address_pre     | a2011359@nepwk.com                 | NULL           | f5aa438d64e1dd601eb2d8cfee14eb87 | 2011-08-29 17:32:22 | 2011-08-29 17:32:22 |
| 400 |        79 | pc_address_token   | 4abe0e547e3d70380b97a39503710bfb   | NULL           | 96bbd0bf9f450577fa3708408cedde85 | 2011-08-29 17:32:22 | 2011-08-29 17:33:38 |
| 401 |        79 | register_token     | 79303a94cc996911c0df0a16971c36c88c | NULL           | d2fe503452124506f6b764a51197b0d4 | 2011-08-29 17:32:22 | 2011-08-29 17:33:38 |
| 402 |        79 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:32:23 | 2011-08-29 17:32:23 |
| 403 |        79 | is_admin_invited   | 1                                  | NULL           | eb60f13757f1516e0031606640744834 | 2011-08-29 17:32:24 | 2011-08-29 17:32:24 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

  • 1通目 新規登録 2通目 管理画面

ふたつメンバができる 

mysql> select * from member_config where member_id='80';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 404 |        80 | pc_address_pre     | a2012080@nepwk.com                 | NULL           | f532e4cd84eda7799c5ebabe89973c55 | 2011-08-29 17:43:42 | 2011-08-29 17:43:42 |
| 405 |        80 | register_token     | 80445dba6f6989a38c47b6a885933bec01 | NULL           | 39e7dabc1eb4faf4d79916941ab2092d | 2011-08-29 17:43:42 | 2011-08-29 17:43:42 |
| 406 |        80 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:43:42 | 2011-08-29 17:43:42 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

mysql> select * from member_config where member_id='81';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 407 |        81 | pc_address_pre     | a2012080@nepwk.com                 | NULL           | f532e4cd84eda7799c5ebabe89973c55 | 2011-08-29 17:44:33 | 2011-08-29 17:44:33 |
| 408 |        81 | pc_address_token   | a670e14827341166e2fb7c6c0f4d6c4c   | NULL           | 10e2bfb72cca45248b3a9bb92c8e3615 | 2011-08-29 17:44:33 | 2011-08-29 17:44:33 |
| 409 |        81 | register_token     | 81d6937871f5ad8beb10febe5a2ca44a9d | NULL           | c71f288207a57923314f91ec42073dee | 2011-08-29 17:44:33 | 2011-08-29 17:44:33 |
| 410 |        81 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:44:33 | 2011-08-29 17:44:33 |
| 411 |        81 | is_admin_invited   | 1                                  | NULL           | eb60f13757f1516e0031606640744834 | 2011-08-29 17:44:34 | 2011-08-29 17:44:34 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

  • 1通目 新規登録 2通目 新規登録

最初でメンバができて後でregister_tokenが更新される

mysql> select * from member_config where member_id='82';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 412 |        82 | pc_address_pre     | a2012221@nepwk.com                 | NULL           | 126915b5193246720e54234bedbfbee4 | 2011-08-29 17:46:02 | 2011-08-29 17:46:02 |
| 413 |        82 | register_token     | 822ff37203048c385e52fa20439b400dcf | NULL           | 26c30ecd72da12fc63808751e9f97850 | 2011-08-29 17:46:02 | 2011-08-29 17:46:02 |
| 414 |        82 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:46:02 | 2011-08-29 17:46:02 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

mysql> select * from member_config where member_id='82';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 412 |        82 | pc_address_pre     | a2012221@nepwk.com                 | NULL           | 126915b5193246720e54234bedbfbee4 | 2011-08-29 17:46:02 | 2011-08-29 17:46:02 |
| 413 |        82 | register_token     | 821c590c97d041a7d77caa9651474000fd | NULL           | 367bd75b7435d2e6884e470fbcc9a6e6 | 2011-08-29 17:46:02 | 2011-08-29 17:46:36 |
| 414 |        82 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:46:02 | 2011-08-29 17:46:02 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

  • 1通目 新規登録 2通目 メンバ招待

register_tokenが更新されてpc_address_tokenが追加される

mysql> select * from member_config where member_id='83';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 415 |        83 | pc_address_pre     | a2012330@nepwk.com                 | NULL           | f707ff8f6e5516ea53d8b9e58cb675a7 | 2011-08-29 17:47:13 | 2011-08-29 17:47:13 |
| 416 |        83 | register_token     | 831827ac85b13ea5661d171ffa0ac3fc4a | NULL           | b9257538b2962d2b8d1c49cbd185eae4 | 2011-08-29 17:47:13 | 2011-08-29 17:47:13 |
| 417 |        83 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:47:13 | 2011-08-29 17:47:13 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

mysql> select * from member_config where member_id='83';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 415 |        83 | pc_address_pre     | a2012330@nepwk.com                 | NULL           | f707ff8f6e5516ea53d8b9e58cb675a7 | 2011-08-29 17:47:13 | 2011-08-29 17:47:13 |
| 416 |        83 | register_token     | 83bc3870f53e12e0db4bce09de089d37cc | NULL           | 6813154071a9fad0022af34a7dd9f2ab | 2011-08-29 17:47:13 | 2011-08-29 17:47:52 |
| 417 |        83 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:47:13 | 2011-08-29 17:47:13 |
| 418 |        83 | pc_address_token   | c54f4e206af6d56e35c13d272fcdc9d3   | NULL           | 772d12f3bca8687a558736a881ffa02f | 2011-08-29 17:47:52 | 2011-08-29 17:47:52 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

  • 1通目 メンバ招待 2通目 管理画面

2つメンバができる.

mysql> select * from member_config where member_id='84';
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name             | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 419 |        84 | pc_address_pre   | a2012559@nepwk.com                 | NULL           | e2c02587c7ccb0fa283e5f46404fea3a | 2011-08-29 17:51:07 | 2011-08-29 17:51:07 |
| 420 |        84 | pc_address_token | eaa861794fbd910c6f59b68427a9c28b   | NULL           | 57202bc32aa039433226435415a6b4be | 2011-08-29 17:51:07 | 2011-08-29 17:51:07 |
| 421 |        84 | register_token   | 8435712e67c33ba191f8d9e47ae96caa4b | NULL           | 87da37d323f01ab627f839149ccb8f1f | 2011-08-29 17:51:07 | 2011-08-29 17:51:07 |
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

mysql> select * from member_config where member_id='85';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 422 |        85 | pc_address_pre     | a2012559@nepwk.com                 | NULL           | e2c02587c7ccb0fa283e5f46404fea3a | 2011-08-29 17:51:44 | 2011-08-29 17:51:44 |
| 423 |        85 | pc_address_token   | 839ec1fcf1d904df6a139761d15d78ec   | NULL           | b5ebf470a8e4df0ba6c36bec9a9578a8 | 2011-08-29 17:51:44 | 2011-08-29 17:51:44 |
| 424 |        85 | register_token     | 85bd3b27bb080873e5b7815774499c3b6e | NULL           | e2a49758123443d916683938c7689acf | 2011-08-29 17:51:44 | 2011-08-29 17:51:44 |
| 425 |        85 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:51:44 | 2011-08-29 17:51:44 |
| 426 |        85 | is_admin_invited   | 1                                  | NULL           | eb60f13757f1516e0031606640744834 | 2011-08-29 17:51:44 | 2011-08-29 17:51:44 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

  1. 1通目 メンバ招待 2通目 新規登録

最初メンバができてregister_tokenが更新されてregister_auth_modeが追加される.

mysql> select * from member_config where member_id='86';
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name             | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 427 |        86 | pc_address_pre   | a2012658@nepwk.com                 | NULL           | 592c49370b9ff2ca7f275662461eb4a7 | 2011-08-29 17:52:30 | 2011-08-29 17:52:30 |
| 428 |        86 | pc_address_token | 20b7fd04ccdfc03cd5fd58668c4e3a75   | NULL           | dc554ea22fe0e2142dfabee1d3017c75 | 2011-08-29 17:52:30 | 2011-08-29 17:52:30 |
| 429 |        86 | register_token   | 86eff0ecf6935566daf0a691f7988a25e2 | NULL           | 6724dc9d11d59ff59f77cfb92d49fe62 | 2011-08-29 17:52:30 | 2011-08-29 17:52:30 |
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

mysql> select * from member_config where member_id='86';
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name               | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 427 |        86 | pc_address_pre     | a2012658@nepwk.com                 | NULL           | 592c49370b9ff2ca7f275662461eb4a7 | 2011-08-29 17:52:30 | 2011-08-29 17:52:30 |
| 428 |        86 | pc_address_token   | 20b7fd04ccdfc03cd5fd58668c4e3a75   | NULL           | dc554ea22fe0e2142dfabee1d3017c75 | 2011-08-29 17:52:30 | 2011-08-29 17:52:30 |
| 429 |        86 | register_token     | 8698ad7cd82054f74eba432b9e01f561ba | NULL           | f3c497e73198b8cf5846181ed606ddbf | 2011-08-29 17:52:30 | 2011-08-29 17:53:04 |
| 430 |        86 | register_auth_mode | MailAddress                        | NULL           | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-29 17:53:04 | 2011-08-29 17:53:04 |
+-----+-----------+--------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

  • 1通目 メンバ招待 2通目 メンバ招待

最初メンバができてpc_address_tokenとregister_tokenが更新される.

mysql> select * from member_config where member_id='87';
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name             | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 431 |        87 | pc_address_pre   | a2012755@nepwk.com                 | NULL           | b25dd66a1fb381f222d5276cdec6135c | 2011-08-29 17:53:48 | 2011-08-29 17:53:48 |
| 432 |        87 | pc_address_token | 7f7e8a67b39ef053565d00deb5bb925b   | NULL           | 4032e1ddb8dfc25d671b4850f499fe39 | 2011-08-29 17:53:48 | 2011-08-29 17:53:48 |
| 433 |        87 | register_token   | 8737ec82cc8d74acfd686d9279a75ef02a | NULL           | 5e2e3b439c19b50946341f2525fe80b1 | 2011-08-29 17:53:48 | 2011-08-29 17:53:48 |
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

mysql> select * from member_config where member_id='87';
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| id  | member_id | name             | value                              | value_datetime | name_value_hash                  | created_at          | updated_at          |
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
| 431 |        87 | pc_address_pre   | a2012755@nepwk.com                 | NULL           | b25dd66a1fb381f222d5276cdec6135c | 2011-08-29 17:53:48 | 2011-08-29 17:53:48 |
| 432 |        87 | pc_address_token | d83df059d4061494f5c2142b7eab14ee   | NULL           | 6a565566a5df1f20bc1b0cd6ac9a52ea | 2011-08-29 17:53:48 | 2011-08-29 17:54:16 |
| 433 |        87 | register_token   | 8714fa3712aefa1df2b2bd726dbe58e2d9 | NULL           | f0858f7d808fe9c5c91b237bba0ae3f0 | 2011-08-29 17:53:48 | 2011-08-29 17:54:16 |
+-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+

#9 Yuya Watanabe12年以上前に更新

修正方針

note-8より,同pc_address_preのvalueを持つregister_tokenのupdated_atが最新であるとき,あるメールアドレスで登録しようとしてるもののうち最新のトークンであるものが得られると考えられる.
そのため,メールに記載されたURLが有効かどうかについてもこのトークンの更新時間によって判定することを考える.

#10 wa ta12年以上前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 e9b1c7a1ba77c6c3b3f70dd4bab452a856fe6868 で適用されました。

#11 Yuya Watanabe12年以上前に更新

  • 説明 を更新 (diff)

#12 Yuya Watanabe12年以上前に更新

登録終了時に同じトークンを参照しているが,pc_address_preまたはmobile_address_preが存在しないために登録完了時のホーム表示が行われなかった問題を修正.

#13 Yuya Watanabe12年以上前に更新

別実装案(思いつき)

マイグレートスクリプトにより不必要なメンバを削除する

#14 Kousuke Ebihara12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更

member/register アクションの token パラメータの値として、最新のトークンしか許容しないようになっていることは確認できました。

しかし、コードを見て実際に試してみましたが、以下の点の修正が不足しているようです。

  • 修正を適用した後の環境において、最新のトークンを使用して登録処理をおこなったのち、古い招待メールに記載されている URL から登録処理をおこなうと、登録が完了できてしまう

当初、「修正を適用する前の環境において、最新のトークンを使用して登録処理を完了していた場合、修正を適用後に古い招待メールから登録をおこなえるのではないか」とあたりをつけて動作確認したところ、そのとおりになったので、一瞬そう誤解しかけたのですが、修正の適用の有無に関係なく、一度登録を完了してしまえば、古いトークンを使用して重複登録が可能になってしまうようです。

以下、最初に誤解していた時の指摘事項を貼り付けておきます。


commit 333098394f50dee39c798e4b2ba04cfbd0b93b31
Author: Kousuke Ebihara <ebihara@php.net>
Date:   Fri May 13 16:10:35 2011 +0900

    version 3.6beta10 (this is an emergency release. This release will change 3.6beta10-dev to 3.6beta11-dev)

で管理画面から特定のメールアドレスに招待メールを 2 通送信し(送信処理はそれぞれ独立した POST リクエストで実施)、

| 42 |         7 | pc_address_pre     | o-hira@teriyaki.jp                | NULL                | 7751a44ab5698b81f73e259862470104 | 2011-08-31 21:12:51 | 2011-08-31 21:12:51 |
| 43 |         7 | pc_address_token   | a2978b0ce4acd523adff8e22a407f20f  | NULL                | 924cc1b2172db1b4edc5c3b1fd241402 | 2011-08-31 21:12:51 | 2011-08-31 21:12:51 |
| 44 |         7 | register_token     | 70e0a569ce04349a5bdbb86233905dcdb | NULL                | 45bb8a636d02c5cf0e56e838bdd975d1 | 2011-08-31 21:12:51 | 2011-08-31 21:12:51 |
| 45 |         7 | register_auth_mode | MailAddress                       | NULL                | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-31 21:12:51 | 2011-08-31 21:12:51 |
| 46 |         7 | is_admin_invited   | 1                                 | NULL                | eb60f13757f1516e0031606640744834 | 2011-08-31 21:12:51 | 2011-08-31 21:12:51 |
| 47 |         8 | pc_address_pre     | o-hira@teriyaki.jp                | NULL                | 7751a44ab5698b81f73e259862470104 | 2011-08-31 21:12:57 | 2011-08-31 21:12:57 |
| 48 |         8 | pc_address_token   | d2d31762e182a68289c7b2ab3bbba936  | NULL                | 3be2ad9f580b85d53be3c07f011d0ee0 | 2011-08-31 21:12:57 | 2011-08-31 21:12:57 |
| 49 |         8 | register_token     | 8d10db8e28aa1f5c921e0eb68961d4b29 | NULL                | f387c185cb446c2ae6ef3b4e9caa9e60 | 2011-08-31 21:12:57 | 2011-08-31 21:12:57 |
| 50 |         8 | register_auth_mode | MailAddress                       | NULL                | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-31 21:12:58 | 2011-08-31 21:12:58 |
| 51 |         8 | is_admin_invited   | 1                                 | NULL                | eb60f13757f1516e0031606640744834 | 2011-08-31 21:12:58 | 2011-08-31 21:12:58 |

というレコードが作られたことを確認した上で、 1通目の メールから登録をおこない、

| 42 |         7 | pc_address         | o-hira@teriyaki.jp                | NULL                | e2c6ebcdee22ef4c700056b2883f3950 | 2011-08-31 21:12:51 | 2011-08-31 21:14:32 |
| 44 |         7 | register_token     | 70e0a569ce04349a5bdbb86233905dcdb | NULL                | 45bb8a636d02c5cf0e56e838bdd975d1 | 2011-08-31 21:12:51 | 2011-08-31 21:12:51 |
| 45 |         7 | register_auth_mode | MailAddress                       | NULL                | fba890f9ba38ac0b250c1d2f2fc42afc | 2011-08-31 21:12:51 | 2011-08-31 21:12:51 |
| 46 |         7 | is_admin_invited   | 1                                 | NULL                | eb60f13757f1516e0031606640744834 | 2011-08-31 21:12:51 | 2011-08-31 21:12:51 |

member_id が 7 の member_config のレコードがこのようになったのを確認した上で、 OpenPNE を現時点の master ブランチである

commit 58eca9d7d0361551e0b678eb8e2a8400526460b6
Author: watanabe <watanabe@tejimaya.com>
Date:   Wed Aug 31 14:25:49 2011 +0900

    (refs #2340) fixed to make registration complete

に切り替えた上で、今度は 2通目の メールから登録をおこなったところ、登録が完了できてしまいました。

#15 Yuya Watanabe12年以上前に更新

あるメールアドレスにひもづけられているトークンが最新かどうかに加えて,そのメールアドレスがどこかしらのメンバー情報に含まれている場合はトークンを無効であるとする方針を追加します.
この修正方針の場合,2通送った招待状のうちの2通目のURLを用いて登録が完了し,そのメンバのメールアドレスを変更する操作を行うと1通目のURLが再び有効になると思われます.
しかし,本チケットにおける「同じメールアドレスが登録される」問題には該当しないため今回は考慮しないものとします.

#16 wa ta12年以上前に更新

  • ステータスRejected(差し戻し) から Pending Review(レビュー待ち) に変更

更新履歴 18105249240bfaa89f9994c6c185696b46daf0a9 で適用されました。

#17 Kousuke Ebihara12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更

member_config を name と value の値で検索する場合、 name_value_hash フィールドを用いてください。

通常であれば name と value の複合インデックスを貼って検索のコストを抑えるべきなのですが、 value は固定長ではない text 型フィールドであるため、部分的なインデックスを貼ったとしても複合インデックスにはできない(というバージョンの MySQL があるらしい http://www.res-system.com/weblog/item/550)のと、インデックスのサイズが肥大化しかねないという懸念から、 name と value の値から計算したハッシュ値を name_value_hash という固定長のフィールドに入れ、このフィールドにインデックスを貼ることで、検索の効率化を図っています。

この name_value_hash の値は MemberConfigTable::generateNameValueHash() によって算出することができるので、この値を使って検索してください。

#18 wa ta12年以上前に更新

  • ステータスRejected(差し戻し) から Pending Review(レビュー待ち) に変更

更新履歴 24b6a08559c06895a089543f6dae7222917d91e0 で適用されました。

#19 Kousuke Ebihara12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

#20 Shouta Kashiwagi約12年前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更
  • 3.6 で発生するかUnknown (未調査) にセット
  • 3.4 で発生するかUnknown (未調査) にセット

テストOKです。

#21 kaoru n8年以上前に更新

  • 3.8 で発生するかUnknown (未調査) にセット

他の形式にエクスポート: Atom PDF