0

デフォルトの「無効なメールアドレスまたはパスワード」エラーではなく、ログイン時に入力したメールアドレスまたはパスワードのどれが間違っているかをユーザーに伝えようとしています。

関連するコントローラーファイルに移動しました:

.../app/code/core/Mage/Customer/controllers/accountcontroller.php

コードを141行目から次のように変更しました。

catch (Mage_Core_Exception $e) {
     switch ($e->getCode()) {
          case Mage_Customer_Model_Customer::EXCEPTION_INVALID_EMAIL_OR_PASSWORD:
                if(Zend_Validate::is($login['username'], 'EmailAddress'))
                    $message = $this->__('Wrong password.');
                else
                    $message = $this->__('That email address was not found.');
                    //$message = $e->getMessage();
break;

メールが登録されているかどうかを確認するために、同じファイル内のforgetPasswordPostAction()関数のZend_Validate::is()を使用しました。ただし、ログイン中は機能しません。メールアドレスが登録されていなくても、「パスワードが違います」というメッセージが常に表示されます。

Zend_Validate::is() を間違って使用しているからですか? メールが登録されているかどうかを確認する正しい機能は何ですか?

ありがとう!

4

1 に答える 1

1

admin-user には authenticate_before イベントがありますが、顧客にはありません。

フックできるイベントはありません。Mage_Customer_AccountController を拡張して loginPostAction を上書きし、

case Mage_Customer_Model_Customer::EXCEPTION_INVALID_EMAIL_OR_PASSWORD:

この時点で、$sessionあなたはできることを持っています$session->getCustomer()->loadByEmail($NEWCUSTOMER, $login['username'])

もしそうならempty($NEWCUSTOMER->getData())、メールは間違っています。

しかし、クラッカーが正しいユーザー名を攻撃したかどうかを知るのを助けることは、悪い考えです!

于 2012-07-18T20:34:47.193 に答える