如何在 Magento 中覆盖忘记密码消息

Posted

技术标签:

【中文标题】如何在 Magento 中覆盖忘记密码消息【英文标题】:How to Override Forgot Password Message, in Magento 【发布时间】:2014-02-12 00:19:03 【问题描述】:

我想覆盖前端站点中 Magento 的忘记密码消息:

    当我在我的前端站点中单击忘记密码时,它显示:

如果有与 loremipsum@yahoo.com 关联的帐户,您将收到一封电子邮件,其中包含重置密码的链接。

我想用以下电子邮件验证覆盖此消息:

    您的电子邮件地址 loremipsum@yahoo.com 不存在,或者 我们已在您的电子邮件地址 loremipsum@yahoo.com 中向您发送了一个重置​​链接

在 Magento 默认消息中是否有带有验证的替代解决方案?

谢谢,

【问题讨论】:

【参考方案1】:

去下一课

Mage_Customer_AccountController

并且在这个函数内部存在这条消息

 forgotPasswordPostAction()

你可以从上面的类中重写这个函数

【讨论】:

谢谢,那么我如何从 magento 中提取电子邮件地址。请检查代码。谢谢, 这个变量$email包含email-id,你可以使用它 好的。谢谢,我去看看! :)【参考方案2】:

你可以在

中找到这个
Mage_Customer_AccountController

然后转到函数forgotPasswordPostAction()

并用此代码替换 **

您的条件以 //自定义代码开始**

 public function forgotPasswordPostAction()
        

        $email = (string) $this->getRequest()->getPost('email');
        if ($email) 
            if (!Zend_Validate::is($email, 'EmailAddress')) 
                $this->_getSession()->setForgottenEmail($email);
                $this->_getSession()->addError($this->__('Invalid email address.'));
                $this->_redirect('*/*/forgotpassword');
                return;
            

            /** @var $customer Mage_Customer_Model_Customer */
            $customer = Mage::getModel('customer/customer')
                ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
                ->loadByEmail($email);

            if ($customer->getId()) 
                try 
                    $newResetPasswordLinkToken = Mage::helper('customer')->generateResetPasswordLinkToken();
                    $customer->changeResetPasswordLinkToken($newResetPasswordLinkToken);
                    $customer->sendPasswordResetConfirmationEmail();
                 catch (Exception $exception) 
                    $this->_getSession()->addError($exception->getMessage());
                    $this->_redirect('*/*/forgotpassword');
                    return;
                
            
            else //custom code start
            
              $this->_getSession()->addError(Mage::helper('customer')->__('Your email address %s does not exist.',Mage::helper('customer')->htmlEscape($email)));
             $this->_redirect('*/*/');
            return;  
            //custom code end
            $this->_getSession()
                ->addSuccess(Mage::helper('customer')->__('We have sent you a reset link in your email address %s .', Mage::helper('customer')->htmlEscape($email)));
            $this->_redirect('*/*/');
            return;
         else 
            $this->_getSession()->addError($this->__('Please enter your email.'));
            $this->_redirect('*/*/forgotpassword');
            return;
        
    

之后你可以覆盖它

【讨论】:

好的。谢谢,等等。我会检查一下。 :) 非常感谢!这是一个很大的帮助。该代码现在正在运行。将其标记为答案!

以上是关于如何在 Magento 中覆盖忘记密码消息的主要内容,如果未能解决你的问题,请参考以下文章

Magento“忘记密码”电子邮件以错误的语言发送

如何覆盖默认的 django 忘记密码模板?

如何使用 Firebase 实现忘记密码功能?

向 Laravel 忘记密码表单添加额外问题并自定义其错误消息

三菱q系列PLC程序设了密码,忘记了,可以重新输一份进去覆盖掉么?

Magento密码重置不起作用