質問 > フロント機能 > [EC-CUBE 2.13.3] 会員登録後、パスワード再発行ができません |
フロント機能
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
soc |
投稿日時: 2015/11/16 11:41
対応状況: −−−
|
常連 登録日: 2015/10/16 居住地: 投稿: 44 |
[EC-CUBE 2.13.3] 会員登録後、パスワード再発行ができません ------------------------------------------------------------------------------------------
[EC-CUBE] 2.13.3 [レンタルサーバ] CPI [OS] win8.1 [PHP] PHP 5.5.16 [データベース] MySQL 5.5.14 [ブラウザ] Google Chrome [導入プラグインの有無] 複数あり [カスタマイズの有無] ------------------------------------------------------------------------------------------ 会員登録後、パスワードの再発行ができません。 デフォルトの状態の入力欄にある お名前(姓)、お名前(名)、メールアドレス を間違いなく入力していますが、エラー(氏名が間違っているか、メールアドレスが存在しません)が返され、 パスワードの再発行ができません。 再発行ができるようにしたいです。 関連のありそうな現状の記述を記載いたします。 ----------------------------------------------- ファイル名: /data/class/pages/forgot/LC_Page_Forgot.php ------------------------ ------------------------ require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Ex.php'; /** * パスワード発行 のページクラス. * * @package Page * @author LOCKON CO.,LTD. * @version $Id: LC_Page_Forgot.php 23606 2014-08-27 10:08:02Z kimoto $ */ class LC_Page_Forgot extends LC_Page_Ex { /** フォームパラメーターの配列 */ public $objFormParam; /** 秘密の質問の答え */ public $arrReminder; /** 変更後パスワード */ public $temp_password; /** エラーメッセージ */ public $errmsg; /** * Page を初期化する. * * @return void */ public function init() { $this->skip_load_page_layout = true; parent::init(); $this->tpl_title = 'パスワードを忘れた方'; $this->tpl_mainpage = 'forgot/index.tpl'; $this->tpl_mainno = ''; $masterData = new SC_DB_MasterData_Ex(); $this->arrReminder = $masterData->getMasterData('mtb_reminder'); $this->device_type = SC_Display_Ex::detectDevice(); $this->httpCacheControl('nocache'); // デフォルトログインアドレスロード $objCookie = new SC_Cookie_Ex(); $this->tpl_login_email = $objCookie->getCookie('login_email'); } /** * Page のプロセス. * * @return void */ public function process() { parent::process(); $this->action(); $this->sendResponse(); } /** * Page のアクション. * * @return void */ public function action() { // パラメーター管理クラス $objFormParam = new SC_FormParam_Ex(); switch ($this->getMode()) { case 'mail_check': $this->lfInitMailCheckParam($objFormParam, $this->device_type); $objFormParam->setParam($_POST); $objFormParam->convParam(); $objFormParam->toLower('email'); $this->arrForm = $objFormParam->getHashArray(); $this->arrErr = $objFormParam->checkError(); if (SC_Utils_Ex::isBlank($this->arrErr)) { $this->errmsg = $this->lfCheckForgotMail($this->arrForm, $this->arrReminder); if (SC_Utils_Ex::isBlank($this->errmsg)) { $this->tpl_mainpage = 'forgot/secret.tpl'; } } break; case 'secret_check': $this->lfInitSecretCheckParam($objFormParam, $this->device_type); $objFormParam->setParam($_POST); $objFormParam->convParam(); $objFormParam->toLower('email'); $this->arrForm = $objFormParam->getHashArray(); $this->arrErr = $objFormParam->checkError(); if (SC_Utils_Ex::isBlank($this->arrErr)) { $this->errmsg = $this->lfCheckForgotSecret($this->arrForm, $this->arrReminder); if (SC_Utils_Ex::isBlank($this->errmsg)) { // 完了ページへ移動する $this->tpl_mainpage = 'forgot/complete.tpl'; // transactionidを更新させたいので呼び出し元(ログインフォーム側)をリロード。 $this->tpl_onload .= 'opener.location.reload(true);'; } else { // 秘密の答えが一致しなかった $this->tpl_mainpage = 'forgot/secret.tpl'; } } else { // 入力値エラー $this->tpl_mainpage = 'forgot/secret.tpl'; } break; default: break; } // ポップアップ用テンプレート設定 if ($this->device_type == DEVICE_TYPE_PC) { $this->setTemplate($this->tpl_mainpage); } } /** * メールアドレス・名前確認 * * @param array $arrForm フォーム入力値 * @param array $arrReminder リマインダー質問リスト * @return string エラー文字列 問題が無ければNULL */ public function lfCheckForgotMail(&$arrForm, &$arrReminder) { $errmsg = NULL; $objQuery =& SC_Query_Ex::getSingletonInstance(); $where = '(email = ? OR email_mobile = ?) AND name01 = ? AND name02 = ? AND del_flg = 0'; $arrVal = array($arrForm['email'], $arrForm['email'], $arrForm['name01'], $arrForm['name02']); $result = $objQuery->select('reminder, status', 'dtb_customer', $where, $arrVal); if (isset($result[0]['reminder']) and isset($arrReminder[$result[0]['reminder']])) { // 会員状態の確認 if ($result[0]['status'] == '2') { // 正会員 $arrForm['reminder'] = $result[0]['reminder']; } elseif ($result[0]['status'] == '1') { // 仮会員 $errmsg = 'ご入力のemailアドレスは現在仮登録中です。<br/>登録の際にお送りしたメールのURLにアクセスし、<br/>本会員登録をお願いします。'; } } else { $errmsg = 'お名前に間違いがあるか、このメールアドレスは登録されていません。'; } return $errmsg; } /** * メールアドレス確認におけるパラメーター情報の初期化 * * @param SC_FormParam_Ex $objFormParam フォームパラメータークラス * @param array $device_type デバイスタイプ * @return void */ public function lfInitMailCheckParam(&$objFormParam, $device_type) { $objFormParam->addParam('お名前(姓)', 'name01', STEXT_LEN, 'aKV', array('EXIST_CHECK', 'NO_SPTAB', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK')); $objFormParam->addParam('お名前(名)', 'name02', STEXT_LEN, 'aKV', array('EXIST_CHECK', 'NO_SPTAB', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK')); if ($device_type === DEVICE_TYPE_MOBILE) { $objFormParam->addParam('メールアドレス', 'email', null, 'a', array('EXIST_CHECK', 'EMAIL_CHECK', 'NO_SPTAB', 'EMAIL_CHAR_CHECK', 'MOBILE_EMAIL_CHECK')); } else { $objFormParam->addParam('メールアドレス', 'email', null, 'a', array('NO_SPTAB', 'EXIST_CHECK', 'EMAIL_CHECK', 'SPTAB_CHECK', 'EMAIL_CHAR_CHECK')); } return; } /** * 秘密の質問確認 * * @param array $arrForm フォーム入力値 * @param array $arrReminder リマインダー質問リスト * @return string エラー文字列 問題が無ければNULL */ public function lfCheckForgotSecret(&$arrForm, &$arrReminder) { $errmsg = ''; $objQuery =& SC_Query_Ex::getSingletonInstance(); $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 (SC_Utils_Ex::sfIsMatchHashPassword($arrForm['reminder_answer'], $result[0]['reminder_answer'], $result[0]['salt'])) { $is_authorized = true; } if ($is_authorized) { // 秘密の答えが一致 // 新しいパスワードを設定する $new_password = GC_Utils_Ex::gfMakePassword(8); if (FORGOT_MAIL == 1) { // メールで変更通知をする $objDb = new SC_Helper_DB_Ex(); $CONF = $objDb->sfGetBasisData(); $this->lfSendMail($CONF, $arrForm['email'], $arrForm['name01'], $new_password); } $sqlval = array(); $sqlval['password'] = $new_password; SC_Helper_Customer_Ex::sfEditCustomerData($sqlval, $result[0]['customer_id']); $arrForm['new_password'] = $new_password; } else { // 秘密の答えが一致しなかった $errmsg = '秘密の質問が一致しませんでした。'; } } else { //不正なアクセス リマインダー値が前画面と異なる。 // 新リファクタリング基準ではここで遷移は不許可なのでエラー表示 //SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, '', true); $errmsg = '秘密の質問が一致しませんでした。'; } return $errmsg; } /** * 秘密の質問確認におけるパラメーター情報の初期化 * * @param SC_FormParam_Ex $objFormParam フォームパラメータークラス * @param array $device_type デバイスタイプ * @return void */ public function lfInitSecretCheckParam(&$objFormParam, $device_type) { // メールチェックと同等のチェックを再度行う $this->lfInitMailCheckParam($objFormParam, $device_type); // 秘密の質問チェックの追加 $objFormParam->addParam('パスワード確認用の質問', 'reminder', STEXT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK')); $objFormParam->addParam('パスワード確認用の質問の答え', 'reminder_answer', STEXT_LEN, 'aKV', array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK')); return; } ----------------------------------------------- わずかな情報でもご提供いただければ幸いです。 どうぞ よろしくお願いいたします。 ----------------------------------------------- 追記: 以前、会員登録時の必須項目を下記URLを参考に何項目か外しました。 http://it-pocket.com/eccube-2 ・外した項目 秘密の質問、性別、職業 上記の変更が関係していたりするでしょうか。 |
フラット表示 | 前のトピック | 次のトピック |
題名 | 投稿者 | 日時 |
---|---|---|
» [EC-CUBE 2.13.3] 会員登録後、パスワード再発行ができません | soc | 2015/11/16 11:41 |
Re: [EC-CUBE 2.13.3] 会員登録後、パスワード再発行ができません | red | 2015/11/16 12:47 |
Re: [EC-CUBE 2.13.3] 会員登録後、パスワード再発行ができません | soc | 2015/11/16 15:44 |