Example #1
0
 /**
  * 秘密の質問確認
  *
  * @param  array  $arrForm     フォーム入力値
  * @param  array  $arrReminder リマインダー質問リスト
  * @return string エラー文字列 問題が無ければNULL
  */
 public function lfCheckForgotSecret(&$arrForm, &$arrReminder)
 {
     $errmsg = '';
     $objQuery = Application::alias('eccube.query');
     $cols = 'customer_id, reminder, reminder_answer, salt';
     $table = 'dtb_customer';
     $where = '(email = ? OR email_mobile = ?)' . ' AND name01 = ? AND name02 = ?' . ' AND status = 2 AND del_flg = 0';
     $arrVal = array($arrForm['email'], $arrForm['email'], $arrForm['name01'], $arrForm['name02']);
     $result = $objQuery->select($cols, $table, $where, $arrVal);
     if (isset($result[0]['reminder']) and isset($arrReminder[$result[0]['reminder']]) and $result[0]['reminder'] == $arrForm['reminder']) {
         $is_authorized = false;
         if (empty($result[0]['salt'])) {
             // 旧バージョン(2.11未満)からの移行を考慮
             if ($result[0]['reminder_answer'] == $arrForm['reminder_answer']) {
                 $is_authorized = true;
             }
         } elseif (Utils::sfIsMatchHashPassword($arrForm['reminder_answer'], $result[0]['reminder_answer'], $result[0]['salt'])) {
             $is_authorized = true;
         }
         if ($is_authorized) {
             // 秘密の答えが一致
             // 新しいパスワードを設定する
             $new_password = GcUtils::gfMakePassword(8);
             if (FORGOT_MAIL == 1) {
                 // メールで変更通知をする
                 /* @var $objDb DbHelper */
                 $objDb = Application::alias('eccube.helper.db');
                 $CONF = $objDb->getBasisData();
                 $this->lfSendMail($CONF, $arrForm['email'], $arrForm['name01'], $new_password);
             }
             $sqlval = array();
             $sqlval['password'] = $new_password;
             Application::alias('eccube.helper.customer')->sfEditCustomerData($sqlval, $result[0]['customer_id']);
             $arrForm['new_password'] = $new_password;
         } else {
             // 秘密の答えが一致しなかった
             $errmsg = '秘密の質問が一致しませんでした。';
         }
     } else {
         //不正なアクセス リマインダー値が前画面と異なる。
         // 新リファクタリング基準ではここで遷移は不許可なのでエラー表示
         //Utils::sfDispSiteError(PAGE_ERROR, '', true);
         $errmsg = '秘密の質問が一致しませんでした。';
     }
     return $errmsg;
 }
Example #2
0
 public static function sfGetUniqRandomId($head = '')
 {
     // 予測されないようにランダム文字列を付与する。
     $random = GcUtils::gfMakePassword(8);
     // 同一ホスト内で一意なIDを生成
     $id = uniqid($head);
     return $id . $random;
 }