ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 9 years ago

Closed 9 years ago

Last modified 9 years ago

#3679 closed enhancement (fixed)

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

Reported by: toraneko Owned by: 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 (40)

comment:1 Changed 9 years ago by toraneko

Description: modified (diff)

comment:2 Changed 9 years ago by toraneko

r10931でコミットしました。

comment:3 Changed 9 years ago by kiwa

Milestone: OpenPNE2.13.7

2.13.7で取り込みますー

comment:4 Changed 9 years ago by nakasone

Keywords: 確認中 added

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

comment:5 Changed 9 years ago by shingo

Keywords: 差し戻し added; 確認中 removed
  • 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」で変更できてしまいます

comment:6 Changed 9 years ago by shingo

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

comment:7 Changed 9 years ago by shingo

Description: modified (diff)

comment:8 Changed 9 years ago 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}) 
    

comment:9 Changed 9 years ago by shin2008

Owner: changed from nobody to shin2008
Status: newassigned

comment:10 Changed 9 years ago by shin2008

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

comment:11 Changed 9 years ago by shin2008

Keywords: 確認中 added; 差し戻し removed

r11259 で修正しました。

comment:12 Changed 9 years ago by shingo

Keywords: 差し戻し added; 確認中 removed
  • 変数名・関数名を他の箇所に倣って変更してください
    • $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」を用意していますがやっていいるないようにほぼ差がないので、一つの関数にまとめることができないかを検討してください。

comment:13 Changed 9 years ago by shingo

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

comment:14 Changed 9 years ago by shin2008

Keywords: 確認中 added; 差し戻し removed

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

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

comment:15 Changed 9 years ago by shin2008

Keywords: 差し戻し added; 確認中 removed

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

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

comment:16 Changed 9 years ago by shin2008

Description: modified (diff)

comment:17 Changed 9 years ago by shin2008

Description: modified (diff)

comment:18 Changed 9 years ago by shin2008

Keywords: 確認中 added; 差し戻し removed

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

comment:19 Changed 9 years ago 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 の最後の項目について変更がなされておりません。

comment:20 Changed 9 years ago by shingo

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

comment:21 Changed 9 years ago by shingo

Keywords: 差し戻し added; 確認中 removed

comment:22 Changed 9 years ago by imamura623

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

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

よろしくお願いします。

comment:23 Changed 9 years ago by shingo

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

comment:24 Changed 9 years ago by urabe

Keywords: 確認中 added; 差し戻し removed

お疲れ様です。

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

comment:25 Changed 9 years ago 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); 
    

comment:26 Changed 9 years ago by shingo

Keywords: 差し戻し added; 確認中 removed

comment:27 Changed 9 years ago by urabe

Keywords: 確認中 added; 差し戻し removed

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

comment:28 Changed 9 years ago 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	        // 秘密の質問が無効の場合はリダイレクト 
    

comment:29 Changed 9 years ago by urabe

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

comment:30 Changed 9 years ago by urabe

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

comment:31 Changed 9 years ago by shingo

Keywords: テスト待ち added; 確認中 removed

comment:32 Changed 9 years ago by imamura623

Keywords: 差し戻し added; テスト待ち removed

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

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

comment:33 Changed 9 years ago by imamura623

Keywords: 差し戻し removed
Resolution: fixed
Status: assignedclosed

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

comment:34 Changed 9 years ago by kiwa

Summary: 秘密の質問を省略するモード秘密の質問使用可否の設定を追加

comment:35 Changed 9 years ago by kiwa

Resolution: fixed
Status: closedreopened

owner変更のためreopenします。

comment:36 Changed 9 years ago by kiwa

Owner: changed from shin2008 to toraneko
Status: reopenednew

comment:37 Changed 9 years ago by kiwa

Resolution: fixed
Status: newclosed

comment:38 Changed 9 years ago by kudo

Description: modified (diff)

comment:39 Changed 9 years ago by kudo

Description: modified (diff)

comment:40 Changed 9 years ago by shingo

Description: modified (diff)
Note: See TracTickets for help on using tickets.