/** * Forgot customer password action * * @return \Magento\Framework\Controller\Result\Redirect */ public function execute() { /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultRedirectFactory->create(); $email = (string) $this->getRequest()->getPost('email'); if ($email) { if (!\Zend_Validate::is($email, 'EmailAddress')) { $this->session->setForgottenEmail($email); $this->messageManager->addErrorMessage(__('Please correct the email address.')); return $resultRedirect->setPath('*/*/forgotpassword'); } try { $this->customerAccountManagement->initiatePasswordReset($email, AccountManagement::EMAIL_RESET); } catch (NoSuchEntityException $exception) { // Do nothing, we don't want anyone to use this action to determine which email accounts are registered. } catch (SecurityViolationException $exception) { $this->messageManager->addErrorMessage($exception->getMessage()); return $resultRedirect->setPath('*/*/forgotpassword'); } catch (\Exception $exception) { $this->messageManager->addExceptionMessage($exception, __('We\'re unable to send the password reset email.')); return $resultRedirect->setPath('*/*/forgotpassword'); } $this->messageManager->addSuccessMessage($this->getSuccessMessage($email)); return $resultRedirect->setPath('*/*/'); } else { $this->messageManager->addErrorMessage(__('Please enter your email.')); return $resultRedirect->setPath('*/*/forgotpassword'); } }
/** * Forgot customer password action * * @return \Magento\Framework\Controller\Result\Redirect */ public function execute() { /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultRedirectFactory->create(); $email = (string) $this->getRequest()->getPost('email'); if ($email) { if (!\Zend_Validate::is($email, 'EmailAddress')) { $this->_getSession()->setForgottenEmail($email); $this->messageManager->addError(__('Please correct the email address.')); $resultRedirect->setPath('*/*/forgotpassword'); return $resultRedirect; } try { $this->customerAccountManagement->initiatePasswordReset($email, AccountManagement::EMAIL_RESET); } catch (NoSuchEntityException $e) { // Do nothing, we don't want anyone to use this action to determine which email accounts are registered. } catch (\Exception $exception) { $this->messageManager->addException($exception, __('Unable to send password reset email.')); $resultRedirect->setPath('*/*/forgotpassword'); return $resultRedirect; } $email = $this->escaper->escapeHtml($email); // @codingStandardsIgnoreStart $this->messageManager->addSuccess(__('If there is an account associated with %1 you will receive an email with a link to reset your password.', $email)); // @codingStandardsIgnoreEnd $resultRedirect->setPath('*/*/'); return $resultRedirect; } else { $this->messageManager->addError(__('Please enter your email.')); $resultRedirect->setPath('*/*/forgotpassword'); return $resultRedirect; } }
/** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testSendPasswordResetLinkBadEmailDefaultWebsite() { $email = '*****@*****.**'; try { $this->accountManagement->initiatePasswordReset($email, AccountManagement::EMAIL_RESET); $this->fail('Expected exception not thrown.'); } catch (NoSuchEntityException $nsee) { // App area is frontend, so we expect websiteId of 1. $this->assertEquals('No such entity with email = foo@example.com, websiteId = 1', $nsee->getMessage()); } }