Bug(バグ) #2340
完了重複登録しないように修正する前の環境で送信した招待メールでは重複登録が可能になってしまっている
100%
説明
概要¶
#1816 「管理画面 招待メール送信 を利用すると同じメールアドレスを重複登録できる」
での修正により、修正後に送信されたメールに記載されているURLでは重複登録ができないようになっている。
しかし、修正前に送信したメールのURLについては修正後でも重複登録が可能となっており、対処がなされていない。
そのため、修正前に送信されたメールのURLについても重複登録を行えないように対処を行う必要がある。
再現手順¶
- #1816の修正を行う前の環境で下記を行う
- 管理画面でメールアドレスAに招待メールを送る -> 招待状1
- 管理画面で同じメールアドレスAに招待メールを送る -> 招待状2
- 現在メールアドレスAで2通受信されていることを確認する
- 修正を施して現在修正後の環境で以下を行う
- 招待状1から会員登録
→member id 2にて登録完了 # 期待される結果ではない - ログアウトせずに招待状2から会員登録画面を表示
- 登録完了
→member id 3にて登録完了
- 招待状1から会員登録
確認バージョン¶
OpenPNE3.7.0-dev, OpenPNE3.4.15-dev
原因¶
メンバ登録時に,招待メールに記載されたURLのトークンが有効であるかどうかを確認する実装がない.
修正方針¶
note-8より,同pc_address_preのvalueを持つregister_tokenのupdated_atが最新であるとき,あるメールアドレスで登録しようとしてるもののうち最新のトークンであるものが得られると考えられる.
そのため,招待メールに記載されたURLが有効かどうかについてもこのトークンの更新時間によって判定することを考える.
修正内容¶
招待メールに記載されたURLをクリックした際にトークンが有効かどうかを確認する実装を追加した.
具体的には,URLに付与されたトークンがメンバ情報にあるメールアドレスが複数あるうちで最も新しいトークンかどうかを確認している.
Minoru Takai さんが13年以上前に更新
問題が不明瞭なのでチケットに対してコメントします。
チケットに書かれている内容¶
概要¶
#1816 「管理画面 招待メール送信 を利用すると同じメールアドレスを重複登録できる」
での修正により、修正後に送信されたメールに記載されているURLでは重複登録ができないようになっている。
しかし、修正前に送信したメールのURLについては修正後でも重複登録が可能となっており、対処がなされていない。そのため、修正前に送信されたメールのURLについても重複登録を行えないように対処を行う必要がある。
再現手順¶
- #1816の修正を行う前の環境で下記を行う
- 管理画面でメールアドレスAに招待メールを送る -> 招待状1
- 管理画面で同じメールアドレスAに招待メールを送る -> 招待状2
- 現在メールアドレスAで2通受信されていることを確認する
- 修正を施して現在修正後の環境で以下を行う
- 招待状1から会員登録
→member id 2にて登録完了 # 期待される結果ではない- ログアウトせずに招待状2から会員登録画面を表示
- 登録完了
→member id 3にて登録完了
上記に対して¶
#1816 「管理画面 招待メール送信 を利用すると同じメールアドレスを重複登録できる」での修正により、修正後に送信されたメールに記載されているURLでは重複登録ができないようになっている。しかし、修正前に送信したメールのURLについては修正後でも重複登録が可能となっており、対処がなされていない。
「修正後に送信されたメールに記載されているURLでは重複登録ができないようになっている」のではなく、「修正後には招待状が送信されないようになっている」のではないでしょうか。
- #1816の修正を行う前の環境で下記を行う
- 管理画面でメールアドレスAに招待メールを送る -> 招待状1
- 管理画面で同じメールアドレスAに招待メールを送る -> 招待状2
- 現在メールアドレスAで2通受信されていることを確認する
- 修正を施して現在修正後の環境で以下を行う
- 招待状1から会員登録
→member id 2にて登録完了 # 期待される結果ではない- ログアウトせずに招待状2から会員登録画面を表示
- 登録完了
→member id 3にて登録完了
「管理画面でメールアドレスAに招待メールを送る -> 招待状1」の前提として、メールアドレスAが既に登録されたメンバーの有効なメールアドレスであるという条件が必要ではないでしょうか。
そうであれば、「member id 2にて登録完了」することはあり得ず、期待される結果でないのは「招待状1から会員登録」および「招待状2から会員登録」が成功してしまうことだと思います。(なお、ログアウトせずに招待状2への操作を手順として示していますが、ログアウトせずに操作する必要はないと思います。)
Yuya Watanabe さんが13年以上前に更新
メールアドレスの状態としては以下の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からの会員登録」が成功することに関しては期待された結果であると考えられます。
ログアウトについては自身での動作確認を行っていないため言及を控えます。
指摘を踏まえて¶
指摘内容に関して不明瞭だった部分および期待された挙動とは違う挙動である部分についてチケット内容の修正を行うことを考えています。
現時点では不明瞭だった部分については確認しましたが、期待された挙動とは違う挙動である部分は確認されていないという認識です。
Yuya Watanabe さんが約13年前に更新
動作確認¶
内容¶
#1816 の修正以前の動作について確認する.具体的には,2通の招待状をPCメールで送信し,それぞれに記載されているURLのページに遷移したときの動作を確認する.その際,招待状を送る方法として「管理画面から」「新規登録から」「メンバによる招待から」の3つの方法を2通の招待状について網羅的に確認する.ただし,この確認では登録完了までの動作を行っていないため関連元チケットの動作を保証するものではない.
目的¶
本チケットにおける問題のみの修正が行われているかどうかを確認する材料とする.
確認バージョン¶
OpenPNE 3.7.0-dev opAuthMailAddressPlugin 1.3.2確認結果1¶
- 1通目 管理画面 2通目 管理画面 (本チケットの問題に該当)
- 登録画面へ遷移
- 登録画面へ遷移
- 1通目 管理画面 2通目 新規登録
- 登録画面へ遷移
- プロフィール入力画面へ遷移
- 1通目 管理画面 2通目 メンバ招待
- 登録画面へ遷移
- 登録画面へ遷移
- 1通目 新規登録 2通目 管理画面
- プロフィール入力画面へ遷移
- 登録画面へ遷移
- 1通目 新規登録 2通目 新規登録
- 404
- プロフィール入力画面へ遷移
- 1通目 新規登録 2通目 メンバ招待
- 404
- 登録画面へ遷移
- 1通目 メンバ招待 2通目 管理画面
- 登録画面へ遷移
- 登録画面へ遷移
- 1通目 メンバ招待 2通目 新規登録
- 404
- プロフィール入力画面へ遷移
- 1通目 メンバ招待 2通目 メンバ招待
- 404
- 登録画面へ遷移
確認結果2¶
- 1通目 管理画面 2通目 管理画面 (本チケットの問題に該当)
- 404
- 登録画面へ遷移
- 1通目 管理画面 2通目 新規登録
- 404
- プロフィール入力画面へ遷移
- 1通目 管理画面 2通目 メンバ招待
- 404
- 登録画面へ遷移
- 1通目 新規登録 2通目 管理画面
- 404
- 登録画面へ遷移
- 1通目 新規登録 2通目 新規登録
- 404
- プロフィール入力画面へ遷移
- 1通目 新規登録 2通目 メンバ招待
- 404
- 登録画面へ遷移
- 1通目 メンバ招待 2通目 管理画面
- 404
- 登録画面へ遷移
- 1通目 メンバ招待 2通目 新規登録
- 404
- プロフィール入力画面へ遷移
- 1通目 メンバ招待 2通目 メンバ招待
- 404
- 登録画面へ遷移
まとめ¶
確認結果より, #1816 の修正によってURLのリンクをクリックしたときに発生する遷移としては「任意の方法で送られた招待状に関して,最新のもの以外の遷移先を404にする」ことで #1816 の修正と同等の対処となると考えられる.すなわち,本チケットでは今回の修正によって確認結果2と同等の結果が得られることを目的とする.
Yuya Watanabe さんが約13年前に更新
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通目 メンバ招待 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 | +-----+-----------+------------------+------------------------------------+----------------+----------------------------------+---------------------+---------------------+
Yuya Watanabe さんが約13年前に更新
修正方針¶
note-8より,同pc_address_preのvalueを持つregister_tokenのupdated_atが最新であるとき,あるメールアドレスで登録しようとしてるもののうち最新のトークンであるものが得られると考えられる.
そのため,メールに記載されたURLが有効かどうかについてもこのトークンの更新時間によって判定することを考える.
wa ta さんが約13年前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 e9b1c7a1ba77c6c3b3f70dd4bab452a856fe6868 で適用されました。
Yuya Watanabe さんが約13年前に更新
登録終了時に同じトークンを参照しているが,pc_address_preまたはmobile_address_preが存在しないために登録完了時のホーム表示が行われなかった問題を修正.
Kousuke Ebihara さんが約13年前に更新
- ステータス を 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通目の メールから登録をおこなったところ、登録が完了できてしまいました。
Yuya Watanabe さんが約13年前に更新
あるメールアドレスにひもづけられているトークンが最新かどうかに加えて,そのメールアドレスがどこかしらのメンバー情報に含まれている場合はトークンを無効であるとする方針を追加します.
この修正方針の場合,2通送った招待状のうちの2通目のURLを用いて登録が完了し,そのメンバのメールアドレスを変更する操作を行うと1通目のURLが再び有効になると思われます.
しかし,本チケットにおける「同じメールアドレスが登録される」問題には該当しないため今回は考慮しないものとします.
wa ta さんが約13年前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 18105249240bfaa89f9994c6c185696b46daf0a9 で適用されました。
Kousuke Ebihara さんが約13年前に更新
- ステータス を 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() によって算出することができるので、この値を使って検索してください。
wa ta さんが約13年前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 24b6a08559c06895a089543f6dae7222917d91e0 で適用されました。
Kousuke Ebihara さんが約13年前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Shouta Kashiwagi さんが12年以上前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
- 3.6 で発生するか を Unknown (未調査) にセット
- 3.4 で発生するか を Unknown (未調査) にセット
テストOKです。