バージョン選択

フォーラム

メニュー

オンライン状況

45 人のユーザが現在オンラインです。 (38 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 45
もっと...

サイト内検索

質問 > フロント機能 > [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

・外した項目
秘密の質問、性別、職業


上記の変更が関係していたりするでしょうか。
red
投稿日時: 2015/11/16 12:47
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1570
Re: [EC-CUBE 2.13.3] 会員登録後、パスワード再発行ができません
秘密の質問と答えが登録されてないとパスワードの再発行は出来ません


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

soc
投稿日時: 2015/11/16 15:44
対応状況: −−−
常連
登録日: 2015/10/16
居住地:
投稿: 44
Re: [EC-CUBE 2.13.3] 会員登録後、パスワード再発行ができません
red さま

ご指摘いただきましたとおり、秘密の質問を登録すると、再発行ができるようになりました。

この度はお忙しいところ、ご返信いただき誠にありがとうございます。


------------------------------------------
■行った操作まとめ

data/class/helper/SC_Helper_Customer.php
秘密のパスワード を必須項目へ変更

data/Smarty/templates/default/frontparts/form_personal_input.tpl
data/Smarty/templates/default/entry/comfirm.tpl
秘密のパスワード を表示させる
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,873名です
総投稿数は110,000件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.