2012-02-11 9 views
2

お客様は、登録したプライマリ電子メールアドレスとセカンダリ電子メールアドレスの顧客属性フィールドの両方でどのようにログインすることができますか? (私は顧客属性のテキストフィールドsecondary_emailを作成しました)。顧客が持っているために、私はちょうど必要http://www.magentocommerce.com/magento-connect/Sylvain_Raye/extension/7928/diglin_usernameMagento - "Secondary Email"の顧客属性でログインするにはどうすればいいですか?

または

http://www.magentocommerce.com/boards/viewthread/195573/P15/

を:それはcustomerEntityとは何かを持っている人々は、ユーザ名が仕事を得るためにやっているものにsimilairだろうと仮定すると、

1つのシングルパスワードが必要ですが、アカウント内で指定された代替電子メールアドレスを使用できるようにしてください。

ありがとうございました!

答えて

7

Magentoは、他のほとんどのPHPベースのフレームワークとは、実行フローが連続している点が異なります。リクエストフローの観点から考えると、あなたの要件を満たすためのエントリポイントは、ログインフォームPOSTを処理するクラスになります。これはrendered source in your browseraction="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()を参照してください)。可能であれば、イベント観測システムを使用して機能的な書き換えを行うことが一般的には推奨されますが、これは全く直感的でなくても大変な選択肢になります。

関連する問題