Project

General

Profile

Bug(バグ) #2598

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

Added by Kiwa Sakai about 11 years ago. Updated about 11 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2011-11-15
Due date:
% Done:

100%

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

Description

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 View (48.4 KB) Minoru Takai, 2011-12-06 17:49

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


Related issues

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

History

#1 Updated by Kousuke Ebihara about 11 years ago

  • Target version set to 1.3.1

#2 Updated by Yuma Sakata about 11 years ago

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

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

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

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

#3 Updated by Minoru Takai about 11 years ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to 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 Updated by Minoru Takai about 11 years ago

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

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

#5 Updated by Yuya Watanabe about 11 years ago

原因

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 Updated by Yuya Watanabe about 11 years ago

  • Project changed from opAuthOpenIDPlugin to opAuthMailAddressPlugin
  • Target version deleted (1.3.1)

#7 Updated by Yuya Watanabe about 11 years ago

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

#8 Updated by Minoru Takai about 11 years ago

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

#9 Updated by Yuya Watanabe about 11 years ago

  • Assignee changed from Minoru Takai to Yuya Watanabe

#10 Updated by Yuya Watanabe about 11 years ago

  • Target version set to 1.3.5

#11 Updated by Yuya Watanabe about 11 years ago

修正案

他のプラグインの新規登録時に「秘密の質問」が表示されないように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 Updated by Yuya Watanabe about 11 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

#13 Updated by Yuya Watanabe about 11 years ago

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

#14 Updated by Kousuke Ebihara about 11 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

#15 Updated by Yuma Sakata about 11 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100

テストOKです。

#16 Updated by Yuya Watanabe about 11 years ago

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

#17 Updated by 誠二 天重 over 8 years ago

  • Related to Bug(バグ) #3504: 新規登録時に「秘密の質問への答え」が空欄のままでも登録できてしまう added

Also available in: Atom PDF