Ticket #3679 (closed enhancement: fixed)

Opened 8 years ago

Last modified 8 years ago

秘密の質問使用可否の設定を追加

Reported by: toraneko Assigned to: toraneko
Priority: minor Milestone: OpenPNE2.13.7
Component: 指定しない Version:
Keywords: Cc:

Description (Last modified by shingo)

■概要

秘密の質問使用可否の設定を行えるようする。

■仕様

config.phpにて環境設定を行えるようにし、設定によって秘密の質問を利用しない運用を行えるようにする。

秘密の質問を利用する運用で、秘密の質問を登録していないユーザがログインした時は、ユーザホームではなく設定変更画面を表示する。

■修正内容

(1) config.php
    以下のフラグを追加
------------
/ パスワード再発行時、秘密の質問を使用するかどうか
//    TRUE:使用する FALSE:使用しない
define('IS_PASSWORD_QUERY_ANSWER', true);
------------

(2) 修正内容
< IS_PASSWORD_QUERY_ANSWER = false >
・設定変更画面には、秘密の質問に関する項目を表示しない
・パスワード再発行時、秘密の質問は表示しない
  メールアドレスのみで再発行を行う
  ただし、入力されたメールアドレスが登録されているかどうかのチェックは行う

< IS_PASSWORD_QUERY_ANSWER = true >
・設定変更画面には、従来通り、秘密の質問に関する項目を表示する
・パスワード再発行時、従来通り、秘密の質問を表示する
・ログイン時、秘密の質問が登録されていない場合、ホームではなく、設定変更画面を表示する
  (携帯の場合は、秘密の質問・答え設定画面)
  ただし、日記等のURL指定でログインが必要となった場合には、設定変更画面は表示しない
・AUTH_MODEがSlavePNEの場合には、設定変更画面には遷移しない

(3) 備考
秘密の質問は、
・c_password_query_id = 0
AND
・hashed_password_query_answer == ''のハッシュ値
が成立した時、登録されていないと判断する。

(5) ソース
OpenPNE2.13.6ベースで作成

■関連情報

関連チケット: #3776
関連チケット: #3793
関連チケット: #3972

Change History

03/02/09 20:50:24 changed by toraneko

  • description changed.

03/02/09 20:52:55 changed by toraneko

r10931でコミットしました。

03/04/09 16:58:49 changed by kiwa

  • milestone set to OpenPNE2.13.7.

2.13.7で取り込みますー

03/11/09 14:32:01 changed by nakasone

  • keywords set to 確認中.

以下のリビジョンで対応しました。

04/08/09 18:29:09 changed by shingo

  • keywords changed from 確認中 to 差し戻し.
  • webapp/lib/OpenPNE/Config.php で config.php のデフォルト設定がなされていない
  • 以下のSQLの記述について
    webapp/lib/db/member.php
    
    2173     $sql = "SELECT c_member.c_member_id" .
    2174         " ,c_member.c_password_query_id" .
    2175         " ,c_member_secure.hashed_password_query_answer " .
    2176         " FROM c_member, c_member_secure" .
    2177         " WHERE c_member_secure." . $field_name . "= ?" .
    2178         " AND c_member.c_member_id = c_member_secure.c_member_id";
    
    • 特に理由がないのであれば「 '(スラッシュ)」を使ってください
    • 文字列の連結では、2 行目以降の行頭にスペースを入れ、各行の "." 演算子が最初の行の "=" 演算子と同じ位置にくるようにしてください

参考: http://framework.zend.com/manual/ja/coding-standard.coding-style.html#coding-standard.coding-style.strings.literals

  • 「&&」の後を「()」で括る必要がありません(2188行目も同様)
    webapp/lib/db/member.php
    
    2183     if ($c_member['c_password_query_id'] && ($c_member['hashed_password_query_answer'] != md5($null_answer))) {
    
  • if文条件の記述:「&&」の前後を「()」で括る必要がありません」「()」で括る必要がありません
    webapp/modules/ktai/do/o_login.php
    
     96         if ((IS_PASSWORD_QUERY_ANSWER) && (OPENPNE_AUTH_MODE != 'slavepne')) {
    
  • 「IS_PASSWORD_QUERY_ANSWER = false」でも携帯版の「page_h_config_password_query」を表示できてしまいます
  • 「IS_PASSWORD_QUERY_ANSWER = false」でも「ktai_do_h_config_password_query_update_password_query」で変更できてしまいます

04/08/09 18:50:02 changed by shingo

  • 仕様で「ただし、入力されたメールアドレスが登録されているかどうかのチェックは行う」となっていますが、他人のパスワードを知っていれば、誰でも自由にパスワードを変更できる(パスワードを知ることはできませんが)様になっています。設定を行う箇所に何らかの注意書きを明記する必要があると思います。
  • 「メールアドレス」の入力のみだと不安がありますので、対応策実装のための別チケットをつくりました。 → #3776

04/08/09 18:51:21 changed by shingo

  • description changed.

04/08/09 21:37:53 changed by shingo

  • 仕様に「ログイン時、秘密の質問が登録されていない場合、ホームではなく、設定変更画面を表示する」とありますが、登録が完了しなくても他のページへ遷移できます。
  • if文条件の記述:「&&」の前後を「()」で括る必要がありません」「()」で括る必要がありません
    webapp/modules/pc/do/h_config_3.php
    
    100         if ((IS_PASSWORD_QUERY_ANSWER) || (!empty($c_password_query_answer))) {
    
    • 以下のアクションも同様
      • webapp/modules/pc/do/o_login.php
  • 以下の条件分岐では「秘密の質問モード」OFF時でも、「c_password_query_answer」をリクエストすれば登録されてしまいます
    webapp/modules/pc/do/h_config_3.php
    
    100         if ((IS_PASSWORD_QUERY_ANSWER) || (!empty($c_password_query_answer))) {
    
  • 「_login_params」がある時は、登録ページへは遷移しないようです
    webapp/modules/pc/do/o_login.php
    
     71         if ($this->_login_params) {
     72             $url .= '?' . $this->_login_params;
     73         } else {
     74             if ((IS_PASSWORD_QUERY_ANSWER) && (OPENPNE_AUTH_MODE != 'slavepne')) {
    
  • 条件を1行にまとめてください
    webapp/modules/pc/templates/h_config.tpl
    
    81	({if $smarty.const.OPENPNE_AUTH_MODE != 'slavepne'}) 
    82	({if $smarty.const.IS_PASSWORD_QUERY_ANSWER}) 
    

04/09/09 10:31:55 changed by shin2008

  • owner changed from nobody to shin2008.
  • status changed from new to assigned.

04/09/09 21:53:08 changed by shin2008

差し戻しの際の指摘された点を修正してコミットしました。

04/10/09 12:04:57 changed by shin2008

  • keywords changed from 差し戻し to 確認中.

r11259 で修正しました。

04/10/09 14:00:03 changed by shingo

  • keywords changed from 確認中 to 差し戻し.
  • 変数名・関数名を他の箇所に倣って変更してください
    • $is_password_query_answer
    • $is_password_query_answer_action
    • db_member_get_is_password_query_answer()
  • SQLで取得する値が1つの場合は「db_get_one」を使う方がいいです
    webapp/lib/db/member.php
    
    $c_member = db_get_assoc($sql, $params);
    
  • 空文字列の場合に文字コードによる差異を気にする必要はありません
    webapp/lib/db/member.php
    
    2176     // 1.8以前との互換性を保つため、SJISでのチェックも行う
    2177     if ($c_member['hashed_password_query_answer'] != mb_convert_encoding($null_answer, 'SJIS-win', 'UTF-8') && $c_member['hashed_password_query_answer'] != md5(mb_convert_encoding($null_answer, 'SJIS-wi     n', 'UTF-8'))) {
    2178         return true;
    2179     }
    
  • 不要な関数があります
    aadb_member_get_is_password_query_answer_old()
    
  • 現状の処理では、確認終了後でも、リクエスト時に毎回確認を行ってしまいます
  • openpne_display_error()はPCモジュール用の関数です(他の箇所も同様)
    webapp/modules/ktai/do/h_config_password_query_update_password_query.php
    
    14	        //秘密の質問が無効の場合の動作 
    15	        if (!IS_PASSWORD_QUERY_ANSWER) { 
    16	            openpne_display_error('アクションが無効になっています', true); 
    17	        }
    
  • 「//」の後、コメントの前には1行空白を入れるのが正式な記述らしいです(あと、コメントを再考してください)
    //秘密の質問が無効の場合の動作
    
  • 「/db_member_h_config_3」のかわりに「db_member_h_config_3_no_password_query_answer」を用意していますがやっていいるないようにほぼ差がないので、一つの関数にまとめることができないかを検討してください。

04/10/09 14:02:51 changed by shingo

秘密の質問が登録されているかの確認に、質問内容の方の登録確認は不要でしょうか?

04/10/09 17:46:53 changed by shin2008

  • keywords changed from 差し戻し to 確認中.

お疲れ様です。 差し戻しについて r11265 で再度修正しました。

* 差し戻しのコメント内容を修正

* (秘密の質問を無効→有効にした際に秘密の質問の内容が空の場合)携帯だけログイン時のみ秘密の質問をチェックしていた点をすべてのページを読み込む際に確認する方向に修正しました。

04/10/09 21:20:29 changed by shin2008

  • keywords changed from 確認中 to 差し戻し.

再度検証を行ったところ、秘密の質問の質問がない状態で、質問の答えのみ 登録されている状態でエラーが表示されないことは問題があると判断したので、 再度、差し戻しを行います。

↓秘密の質問の登録の際の問題で、新たにバグが確認できたので別チケットも作成しました。
#3793 「秘密の質問」の質問の値が0 (質問がなしの状態) で登録が完了する

04/10/09 21:24:41 changed by shin2008

  • description changed.

04/10/09 21:27:35 changed by shin2008

  • description changed.

04/10/09 21:54:15 changed by shin2008

  • keywords changed from 差し戻し to 確認中.

r11267 で秘密の質問の質問も必須に設定

04/13/09 13:52:08 changed by shingo

  • 「do_inc_page_header_logout」は必要ないようです(携帯版も同様)
    webapp/lib/auth.inc
    
    91	    // 秘密の質問が未登録の場合でもアクセスすることのできるアクション 
    92	    $password_query_answer_ext_page = array( 
    93	        'do_h_config_3', 
    94	        'page_h_config', 
    95	        'do_inc_page_header_logout', 
    96	    ); 
    
  • 以下の処理の目的がよく分りません(携帯版も同様)
    webapp/lib/auth.inc
    
    101     if ($is_registered_password_query_answer) {
    102         $_SESSION['regist_step'] = true;
    103     } else {
    104         $_SESSION['regist_step'] = false;
    105     }
    
  • webapp/lib/db/member.php の82・84行目に不要な空白があります
  • intvalする意図はなんでしょうか?
    webapp/lib/db/member.php
    
    2172      || !intval($c_member['c_password_query_id'])) {
    
  • 携帯でのリダイレクト時のメッセージでは文字列をそのまま渡すことはしていないことが多いです。また、設定によって、実行できないアクションの場合は「handle_kengen_error()」を使っているようです。(他の箇所も同様)
    webapp/modules/ktai/do/h_config_password_query_update_password_query.php
    
     14         // 秘密の質問が無効の場合の動作
     15         if (!IS_PASSWORD_QUERY_ANSWER) {
     16             $p = array('msg' => 'アクションが無効になっています');
     17             openpne_redirect('ktai', 'page_h_home', $p);
     18         }
    
  • comment:12 の最後の項目について変更がなされておりません。

04/13/09 13:59:00 changed by shingo

  • 条件が間違っています
    webapp/modules/pc/templates/h_config.tpl
    
    ({if $smarty.const.OPENPNE_AUTH_MODE != 'slavepne' && $smarty.const.IS_PASSWORD_QUERY_ANSWER}) 
    

04/13/09 14:33:16 changed by shingo

  • keywords changed from 確認中 to 差し戻し.

04/13/09 18:40:13 changed by imamura623

以下確認をお願いします。

  • IS_PASSWORD_QUERY_ANSWER', false時に携帯でアドレスを正しく入力していてもパスワード再発行出来ない。
  • IS_PASSWORD_QUERY_ANSWER', false時に携帯でアドレス欄を空欄でパスワード再発行すると”新しいパスワードをメールで送信しました”と表示され携帯ログイン画面に遷移する。
  • IS_PASSWORD_QUERY_ANSWER', true時にメールアドレスのみ空欄でパスワード再発行をしようとすると”新しいパスワードをメールで送信しました”と表示され携帯ログイン画面に遷移する。

よろしくお願いします。

04/13/09 18:47:47 changed by shingo

bizモードに対応させてください。

04/14/09 10:29:01 changed by urabe

  • keywords changed from 差し戻し to 確認中.

お疲れ様です。

r11288 でコミットしましたので確認をお願いします。

04/14/09 11:43:44 changed by shingo

  • webapp/lib/db/member.php:1212行目に不要な空白が追加されている
  • 以下の箇所がおかしいです
    webapp/lib/db/member.php
    
    2124 
    2125 /**
    2126 password_query_answer,
    
  • 不要な「<」がいる
    webapp_biz/modules/ktai/templates/h_home.tpl
    
    277	({if $smarty.const.IS_PASSWORD_QUERY_ANSWER})< 
    
  • 「り」がひらがな・「はりダイレクト 」はなくても良いと思います(他の箇所も同様)
    14	        // 秘密の質問が無効の場合はりダイレクト 
    
  • インデントがおかしい
    webapp/modules/pc/do/h_config_3.php
    
  • 以下の記述を改善してください
    webapp/modules/ktai/do/o_password_query.php
    
     19         //--- 権限チェック
     20         //パスワード確認の質問と答えがあっている
     21         if (IS_PASSWORD_QUERY_ANSWER) {
     22             if (!$c_member_id = db_member_is_password_query_complete2(
     23                             $requests['ktai_address'],
     24                             $requests['c_password_query_id'],
     25                             $requests['password_query_answer'])) {
     26                 $p = array('msg' => 25);
     27                 openpne_redirect('ktai', 'page_o_password_query', $p);
     28             }
     29         } else {
     30             if (!$requests['ktai_address'] || !$c_member_id = db_member_c_member_id4ktai_address($requests['ktai_add    ress'])) {
     31                 $p = array('msg' => 25);
     32                 openpne_redirect('ktai', 'page_o_password_query', $p);
     33             }
     34         }
     35         //---
    
  • デバッグ用の記述を消してください
    37	var_dump($requests['ktai_address'], $c_member_id); 
    

04/14/09 11:52:10 changed by shingo

  • keywords changed from 確認中 to 差し戻し.

04/14/09 14:50:03 changed by urabe

  • keywords changed from 差し戻し to 確認中.

再度、 r11294 にてコミットしました

04/14/09 15:43:38 changed by shingo

  • webapp/lib/db/member.php の1212行目が削除されています
  • 「IS_PASSWORD_QUERY_ANSWER」の条件を先に記述した方が分りやすいと思います(他の箇所も同様)
    webapp/lib/db/member.php
    
    1234	    if (!empty($c_password_query_answer) && IS_PASSWORD_QUERY_ANSWER) { 
    
  • リクエストの未入力チェックが行われていません(携帯も同様)
    webapp/modules/pc/do/o_password_query.php
    
  • 不要な「<」がある
    19	        // --- リクエスト変数< 
    20	        $ktai_address = $requests['ktai_address']; 
    21	        $q_id = $requests['c_password_query_id']; 
    22	        $q_answer = $requests['password_query_answer']; 
    23	        // ----------< 
    
  • メッセージの位置がおかしい(個人的にはメッセージを削除してもいいと思います)
    webapp/modules/pc/do/o_password_query.php
    
     26         //パスワード確認の質問と答えがあっている
    
  • webapp/modules/pc/do/o_password_query.php の48行目が削除されています
  • 「リダイレクト」とありがリダイレクトしていない。コメントにも書きましたが「はリダイレクト」を削除した方がいいと思います
    webapp/modules/ktai/page/h_config_password_query.php(他数箇所)
    
    14	        // 秘密の質問が無効の場合はリダイレクト 
    

04/14/09 17:19:42 changed by urabe

r11298 にてコミットしました。

04/14/09 17:35:30 changed by urabe

再度、 r11299 でコミットしました

04/14/09 17:36:44 changed by shingo

  • keywords changed from 確認中 to テスト待ち.

04/15/09 18:13:20 changed by imamura623

  • keywords changed from テスト待ち to 差し戻し.

テストしました。 以下、確認お願いします。

 * IS_PASSWORD_QUERY_ANSWER', false時に携帯でアドレスを正しく入力していてもパスワード再発行出来ない。  * IS_PASSWORD_QUERY_ANSWER', false時に携帯でアドレス欄を空欄でパスワード再発行すると”パスワード再発行できませんでした”とエラーメッセージが表示されます。

04/15/09 18:25:00 changed by imamura623

  • keywords deleted.
  • status changed from assigned to closed.
  • resolution set to fixed.

上記、再テストし問題ないことがわかりましたので撤回します。 他の問題も見られないためチケットを閉じます。

04/16/09 16:58:27 changed by kiwa

  • summary changed from 秘密の質問を省略するモード to 秘密の質問使用可否の設定を追加.

04/16/09 19:38:28 changed by kiwa

  • status changed from closed to reopened.
  • resolution deleted.

owner変更のためreopenします。

04/16/09 19:38:38 changed by kiwa

  • owner changed from shin2008 to toraneko.
  • status changed from reopened to new.

04/16/09 19:38:46 changed by kiwa

  • status changed from new to closed.
  • resolution set to fixed.

05/25/09 11:19:37 changed by kudo

  • description changed.

05/25/09 11:19:59 changed by kudo

  • description changed.

06/23/09 16:03:45 changed by shingo

  • description changed.