gpt4 book ai didi

php - Magento - 如何使用 “Secondary Email” 客户属性登录?

转载 作者:行者123 更新时间:2023-12-04 20:55:41 25 4
gpt4 key购买 nike

客户如何能够同时使用他们注册时使用的主要电子邮件地址以及次要电子邮件地址客户属性字段登录? (我创建了一个客户属性文本字段 secondary_email)。

假设它与 customerEntity 有关,并且类似于人们为使用户名起作用所做的事情:http://www.magentocommerce.com/magento-connect/Sylvain_Raye/extension/7928/diglin_username

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

我只需要客户有 1 个密码,但如果他们愿意,可以使用他们帐户中指定的备用电子邮件地址。

谢谢!

最佳答案

Magento 与几乎所有其他基于 PHP 的框架没有什么不同,因为它具有串行执行流程。从请求流的角度考虑,确定您的要求的入口点是处理登录表单 POST 的类。你可以在 rendered source in your browser 中看到这个:action="https://demo.magentocommerce.com/customer/account/loginPost/"

上述 URI 解析为方法 Mage_Customer_AccountController::loginPostAction()。在那里可以找到登录 Controller 操作的典型登录逻辑:用户登录了吗?用户是否在登录数据中发帖?登录数据有效吗?等等。这很快指向客户 session 模型 Mage_Customer_Model_Session,特别是 authenticate() 方法。在这个方法中调用了 Mage_Customer_Model_Customer->loadByEmail(),它让我们进入 Mage_Customer_Model_Entity_Model->loadByEmail()`。

在这一点上,我们知道我们可以重写资源模型并更改其 loadByEmail() 以处理辅助电子邮件方法的查找(困惑和干扰)。我们还可以重写和更改 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)
}
}

我没有真正研究过上面的代码片段,我也不会保证它的安全性,但希望这展示了人们可以利用框架的意识来回答这些类型的问题的过程。这可能是一个不错的起点;在配置的类重写中使用类似的东西加上一个设置脚本来添加 secondary_email 属性,这应该可以快速实现。

值得一提的注意事项:

也可以通过观察运行时构造的 controller_action_predispatch_customer_account_loginpost 事件来完成此操作(参见 Mage_Core_Controller_Varien_Action::preDispatch())。虽然通常建议在可能的情况下使用事件观察系统来实现功能重写,但这将是非常不直观的,也是所有选项中最困惑的。

关于php - Magento - 如何使用 “Secondary Email” 客户属性登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com