Magentoは、他のほとんどのPHPベースのフレームワークとは、実行フローが連続している点が異なります。リクエストフローの観点から考えると、あなたの要件を満たすためのエントリポイントは、ログインフォームPOSTを処理するクラスになります。これはrendered source in your browser:action="https://demo.magentocommerce.com/customer/account/loginPost/"
にあります。
上記のURIは、Mage_Customer_AccountController::loginPostAction()
の方法で解決されます。そこには、ログインコントローラのアクションのための典型的なログインロジックがあります:ユーザはログインしていますか?ユーザーがログインデータに投稿していますか?ログインデータは有効ですか?等々。これにより、顧客セッションモデルMage_Customer_Model_Session
、特にauthenticate()
メソッドがすぐに指し示されます。このメソッドでは、Mage_Customer_Model_Customer->loadByEmail()
を呼び出して、Mage_Customer_Model_Entity_Model-> loadByEmail() `を取得します。
この時点で、リソース・モデルを書き換えて、loadByEmail()
を変更して2次電子メール・メソッドの参照を処理できることがわかりました(厄介な&が目立ちます)。またMage_Customer_Model_Session->authenticate()
を書き換えて変更して、予備の処理で予備のメールを最初に読み込んだ後、メインのメールを抽出して通常どおり処理を進めることもできます。
//rewritten authenticate method
public function authenticate($username,$password) {
$customer = Mage::getResourceModel('customer/customer_collection')
->addAttributeToFilter('secondary_email',$username)
->getFirstItem();
//check we found customer record by secondary email
if ($customer->getId()) {
parent::authenticate($login,$customer->getEmail());
}
else {
parent::authenticate($username,$password)
}
}
私は実際に上記のスニペットに見ていませんでした、また私は、そのセキュリティを保証するだろうが、うまくいけば、これは、1つのフレームワークの意識を使用して、質問のこれらの種類を答えることが可能なプロセスを示しています。これは悪い出発点ではないかもしれません。設定されたクラスリライトと同様のものと、属性を追加するためのセットアップスクリプトを使用すると、実装が迅速になります。
言及する価値注記:
それは実行時に構築controller_action_predispatch_customer_account_loginpost
イベントを観察することによって、これを達成することも可能です(Mage_Core_Controller_Varien_Action::preDispatch()
を参照してください)。可能であれば、イベント観測システムを使用して機能的な書き換えを行うことが一般的には推奨されますが、これは全く直感的でなくても大変な選択肢になります。