プロジェクト

全般

プロフィール

Bug(バグ) #2598

他の認証プラグインで「秘密の質問」の項目が表示されてしまう

Kiwa Sakai12年以上前に追加. 12年以上前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2011-11-15
期日:
進捗率:

100%

3.6 で発生するか:
Unknown (未調査)
[QA]バグ通知済:
いいえ
3.8 で発生するか:
Unknown (未調査)

説明

Overview (現象)

opAuthOpenIDPlugin をつかって新規登録をおこなうと秘密の質問がハッシュ化されずに登録される。

mysql> select id,member_id,name,value from member_config where member_id=5;
+----+-----------+-------------------+-----------------------------------------------+
| id | member_id | name              | value                                         |
+----+-----------+-------------------+-----------------------------------------------+
| 30 |         5 | register_token    | 510d2a4514778c3d12ce594fbb4a728cd             |
| 31 |         5 | openid            | http://openid.example.com/                    |
| 39 |         5 | secret_question   | 1                                             |
| 40 |         5 | secret_answer     | 123124                                        |

Environment (再現バージョン)

OpenPNE3.6.0

Way to repro (再現手順)

1. ログイン画面より未登録のOpenIDのURLを利用してログインを実行する
2. 手順に沿って新規登録をおこなう
3. member_config テーブルに登録された 2 の情報を確認する
4. 秘密の質問がハッシュ化されていない

これにより、 opAuthOpenIDPlugin で新規登録をおこなったメンバーが、秘密の質問の答えが一致しないためにopAuthMailAddressPluginのパスワード再発行をおこなえない状態がうまれます。
しかし opAuthOpenIDPlugin にはパスワード再発行機能がないのでそれほど重要な問題ではないかもしれません。

関連しているかもしれないチケット
#2595 OpenID で新規登録した場合、秘密の質問への答えが●で表示される

修正方針

opAuthOpenIDPluginでは「秘密の質問」の項目を不要とし,表示しないようにする.

実装

「秘密の質問」が表示されていた原因はopAuthMailAddressPluginがインストールされていた状態だったからであり,opAuthOpenIDPluginの意図する挙動ではなかったことがあげられる.
そのため,修正はopAuthOpenIDPluginのほうではなくopAuthMailAddressPlugin側で行い,問題の内容を「他の認証プラグインで「秘密の質問」の項目が表示されてしまう」として本チケットの対応を行った.

only_opAuthOpenIDPlugin.png 表示 (48.4 KB) Minoru Takai, 2011-12-06 17:49

with_opAuthMailAddressPlugin.png 表示 (58.9 KB) Minoru Takai, 2011-12-06 17:49


関連するチケット

関連している opAuthMailAddressPlugin - Bug(バグ) #2595: OpenID で新規登録した場合、秘密の質問への答えが●で表示される Invalid(無効) 2011-11-14
関連している opAuthMailAddressPlugin - Backport(バックポート) #2848: 他の認証プラグインで「秘密の質問」の項目が表示されてしまう Fixed(完了) 2011-11-15
関連している OpenPNE 3 - Bug(バグ) #3504: 新規登録時に「秘密の質問への答え」が空欄のままでも登録できてしまう Fixed(完了) 2013-11-28

履歴

#1 Kousuke Ebihara12年以上前に更新

  • 対象バージョン1.3.1 にセット

#2 Yuma Sakata12年以上前に更新

OpenPNE3.4.17 opAuthOpenIDPlugin Version 1.1.1 でも再現しました。

担当者と話した結果、以下の理由により今回の修正では「秘密の質問への答え」を外します。

opAuthOpenIDPlugin にはパスワード再発行機能がないのでそれほど重要な問題ではないかもしれません。

また、今回の対応により #2595 はクローズします。

#3 Minoru Takai12年以上前に更新

  • ステータスNew(新規) から Accepted(着手) に変更
  • 担当者Minoru Takai にセット

調査

修正方針は「 OpenID での初回ログイン(登録)時には、そのフォームで秘密の質問と答えを出さないようにする」ということにすると note-2 のコメントがされたときに検討しました。

このチケットの問題は opAuthOpenIDPlugin にあると考えていました(コアではなく、ここだろうと思っていた)。そのため、OpenPNE-3.6.0 を用意し、 opAuthOpenIDPlugin に注目して調査していました。

余談ですが、 http://redmine.openpne.jp/issues/2607 この問題に引っかかって、OpenID での初回ログイン後の登録フォームに辿り着くことすら梃子摺ってしまいました。

早速、「秘密の質問」などの記述がある部分を探ったのですが、妙なことに opAuthMailAddressPlugin の中でしかその記述が見つかりませんでした。

つまり翻訳などが opAuthMailAddressPlugin に依存しているのではないかと思い、これを管理画面から無効にして、再度 OpenID で初回ログインし、登録フォームを表示させてみました(登録フォームで再読み込みしても同じですね)。

するとこのチケットで問題としている部分が諸々無くなりました。

つまり、この問題は opAuthMailAddressPlugin が有効か無効かによって、これに関係しない認証プラグインでの新規登録フォームで表示される入力項目が変わってしまう、コア側の問題と考えられるように思います。

そうでなければ opAuthOpenIDPlugin 側で opAuthMailAddressPlugin 内で用意されたものを使っているという問題ですが、 opAuthMailAddressPlugin を管理画面から無効にしただけで想定する結果となったことを鑑みると、コア側の問題ということになるでしょうか。

ここまでの事実は確認できましたが、具体的な修正箇所については今の時点で私は想像ができていません。

#4 Minoru Takai12年以上前に更新

note-3 で参考までに画像を添付するのを忘れていました。

  • opAuthMailAddressPlugin を有効にしている場合
  • opAuthMailAddressPlugin を無効にしている場合

#5 Yuya Watanabe12年以上前に更新

原因

member_config.ymlというファイル全部の中でisRegistがtrueとなるものがフォームとして表示される.
opAuthMailAddressPluginを無効にするとこの「秘密の質問」が消えるのは,その項目を含むmember_config.ymlファイルを持っているのがopAUthMailAddressPluginconfig/member_config.yml だから.

lib/form/opAuthRegisterForm.class.php内でMemberForm,MemberProfileForm,MemberConfigFormなどのフォームを表示することを決定する.

この中で「秘密の質問」の表示を行なっているのはlib/form/doctrine/MemberConfigForm.class.phpである.

($this->isNew && $value['isRegist'])がtrueとなるときMemberConfigWidgetとして追加される.

 48   public function generateConfigWidgets()
 49   {
 50     foreach ($this->memberConfigSettings as $key => $value) {
 51       if ($this->isNew && $value['IsRegist'] || !$this->isNew && $value['IsConfig']) {
 52         $this->setMemberConfigWidget($key);
 53       }
 54     }
 55 
 56     if ('mobile_frontend' === sfConfig::get('sf_app'))
 57     {
 58       $this->appendMobileInputMode();
 59     }
 60   }

sfConfig::get('openpne_member_config')によって OpenPNE に存在する member_config.yml ファイルすべてを取得する.

 93   public function setMemberConfigSettings()
 94   {
 95     $categories = sfConfig::get('openpne_member_category');
 96     $configs = sfConfig::get('openpne_member_config');
 97     //var_dump($configs);
 98 
 99     if (!$this->category) {
100       $this->memberConfigSettings = $configs;
101       return true;
102     }
103 
104     foreach ($categories[$this->category] as $value)
105     {
106       $this->memberConfigSettings[$value] = $configs[$value];
107     }
108   }

member_config.ymlのリスト

./lib/config/config/member_config.yml
./plugins/opDiaryPlugin/config/member_config.yml
./plugins/opAuthMailAddressPlugin/config/member_config.yml
./plugins/opBlogPlugin/config/member_config.yml

IsRegistがtrueとなるmember_config.ymlの設定

./lib/config/config/member_config.yml

 36   age_public_flag:
 37     Name:       "age_public_flag" 
 38     Caption:    "Public Flag for Age" 
 39     FormType:   "select" 
 40     ValueType:  "integer" 
 41     IsRegist:   true
 42     IsConfig:   true
 43     IsRequired: true
 44     IsUnique:   false
 45     IsConfirm:  false
 46     Default: 3
 47     Choices:
 48       4: "All Users on the Web" 
 49       1: "All Members" 
 50       2: "%my_friend%" 
 51       3: "Private" 

 87 password:
 88   _attributes:
 89     caption: "Password Configuration" 
 90     enable_pc:     true
 91     enable_mobile: true
 92   password:
 93     Name:       "password" 
 94     Caption:    "Password" 
 95     Info:       "Password must be 6-12 characters." 
 96     FormType:   "password" 
 97     ValueType:  "password" 
 98     IsRegist:   true
 99     IsConfig:   true
100     IsUnique:   false
101     IsRequired: true
102     IsConfirm:  true

./plugins/opAuthMailAddressPlugin/config/member_config.yml

secretQuestion:
  _attributes:
    caption:       "Secret Question Configuration" 
    enable_pc:     true
    enable_mobile: true
  secret_question:
    Name:       "secret_question" 
    Caption:    "Secret Question" 
    FormType:   "select" 
    ValueType:  "integer" 
    IsRegist:   true
    IsConfig:   true
    IsUnique:   false
    IsRequired: true
    IsConfirm:  false
    Choices:
      1 : "What is your father's / mother's former name?" 
      2 : "What is last 5 digits of your driving license number?" 
      3 : "What is your first crush's name?" 
      4 : "What is your finished elementary school?" 
      5 : "What is region name of your domicile of origin?" 

  secret_answer:
    Name:       "secret_answer" 
    Caption:    "Answer for Secret Question" 
    FormType:   "password" 
    ValueType:  "text" 
    IsRegist:   true
    IsConfig:   true
    IsUnique:   false
    IsRequired: true
    IsConfirm:  false

#6 Yuya Watanabe12年以上前に更新

  • プロジェクトopAuthOpenIDPlugin から opAuthMailAddressPlugin に変更
  • 対象バージョン を削除 (1.3.1)

#7 Yuya Watanabe12年以上前に更新

note-5 の理由により「秘密の質問」の項目を表示しているのはopAuthMailAddressPluginをインストールしていることが原因のため,プロジェクトを移動させました.

#8 Minoru Takai12年以上前に更新

note-7 に補足して、同様の問題 #2595 も同じプロジェクトに移動してクローズしました。

#9 Yuya Watanabe12年以上前に更新

  • 担当者Minoru Takai から Yuya Watanabe に変更

#10 Yuya Watanabe12年以上前に更新

  • 対象バージョン1.3.5 にセット

#11 Yuya Watanabe12年以上前に更新

修正案

他のプラグインの新規登録時に「秘密の質問」が表示されないようにIsRegistをfalseにし,opAuthMailAddressPluginの新規登録時のみ表示されるように実装.

diff --git a/config/member_config.yml b/config/member_config.yml
index af008ab..1debde9 100644
--- a/config/member_config.yml
+++ b/config/member_config.yml
@@ -8,7 +8,7 @@ secretQuestion:
     Caption:    "Secret Question" 
     FormType:   "select" 
     ValueType:  "integer" 
-    IsRegist:   true
+    IsRegist:   false
     IsConfig:   true
     IsUnique:   false
     IsRequired: true
@@ -25,7 +25,7 @@ secretQuestion:
     Caption:    "Answer for Secret Question" 
     FormType:   "password" 
     ValueType:  "text" 
-    IsRegist:   true
+    IsRegist:   false
     IsConfig:   true
     IsUnique:   false
     IsRequired: true
diff --git a/lib/form/opAuthRegisterFormMailAddress.class.php b/lib/form/opAuthRegisterFormMailAddress.class.php
index 53241bd..1a1ddd5 100644
--- a/lib/form/opAuthRegisterFormMailAddress.class.php
+++ b/lib/form/opAuthRegisterFormMailAddress.class.php
@@ -20,6 +20,8 @@ class opAuthRegisterFormMailAddress extends opAuthRegisterForm
   public function configure()
   {
     parent::configure();
+    $this->configForm->setMemberConfigWidget('secret_question');
+    $this->configForm->setMemberConfigWidget('secret_answer');

     // Hack for non-rendering secret answer
     $this->configForm->getWidget('secret_answer')->setOption('type', 'text');

#12 Yuya Watanabe12年以上前に更新

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

#13 Yuya Watanabe12年以上前に更新

note-12 の修正により新規登録時に「秘密の質問」の順番が変わるので注意してください.

#14 Kousuke Ebihara12年以上前に更新

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

#15 Yuma Sakata12年以上前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

テストOKです。

#16 Yuya Watanabe12年以上前に更新

  • 題名opAuthOpenIDPlugin をつかって新規登録をおこなうと秘密の質問がハッシュ化されずに登録される から 他の認証プラグインで「秘密の質問」の項目が表示されてしまう に変更
  • 説明 を更新 (diff)

#17 誠二 天重9年以上前に更新

  • 関連している Bug(バグ) #3504: 新規登録時に「秘密の質問への答え」が空欄のままでも登録できてしまう を追加

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