ResetPasswordPost.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. /**
  3. *
  4. * Copyright © Magento, Inc. All rights reserved.
  5. * See COPYING.txt for license details.
  6. */
  7. namespace Magento\User\Controller\Adminhtml\Auth;
  8. use Magento\User\Controller\Adminhtml\Auth;
  9. use Magento\Backend\App\Action\Context;
  10. use Magento\Framework\App\ObjectManager;
  11. use Magento\Backend\Helper\Data;
  12. use Magento\User\Model\UserFactory;
  13. class ResetPasswordPost extends Auth
  14. {
  15. /**
  16. * @var Data
  17. */
  18. private $backendDataHelper;
  19. /**
  20. * @param Context $context
  21. * @param UserFactory $userFactory
  22. * @param Data $backendDataHelper
  23. */
  24. public function __construct(
  25. Context $context,
  26. UserFactory $userFactory,
  27. Data $backendDataHelper = null
  28. ) {
  29. parent::__construct($context, $userFactory);
  30. $this->backendDataHelper = $backendDataHelper ?: ObjectManager::getInstance()->get(Data::class);
  31. }
  32. /**
  33. * Reset forgotten password
  34. *
  35. * Used to handle data received from reset forgotten password form
  36. *
  37. * @return void
  38. */
  39. public function execute()
  40. {
  41. $passwordResetToken = (string)$this->getRequest()->getQuery('token');
  42. $userId = (int)$this->getRequest()->getQuery('id');
  43. $password = (string)$this->getRequest()->getPost('password');
  44. $passwordConfirmation = (string)$this->getRequest()->getPost('confirmation');
  45. try {
  46. $this->_validateResetPasswordLinkToken($userId, $passwordResetToken);
  47. } catch (\Exception $exception) {
  48. $this->messageManager->addError(__('Your password reset link has expired.'));
  49. $this->getResponse()->setRedirect(
  50. $this->backendDataHelper->getHomePageUrl()
  51. );
  52. return;
  53. }
  54. /** @var $user \Magento\User\Model\User */
  55. $user = $this->_userFactory->create()->load($userId);
  56. $user->setPassword($password);
  57. $user->setPasswordConfirmation($passwordConfirmation);
  58. // Empty current reset password token i.e. invalidate it
  59. $user->setRpToken(null);
  60. $user->setRpTokenCreatedAt(null);
  61. try {
  62. $errors = $user->validate();
  63. if ($errors !== true && !empty($errors)) {
  64. foreach ($errors as $error) {
  65. $this->messageManager->addError($error);
  66. $this->_redirect(
  67. 'adminhtml/auth/resetpassword',
  68. ['_nosecret' => true, '_query' => ['id' => $userId, 'token' => $passwordResetToken]]
  69. );
  70. }
  71. } else {
  72. $user->save();
  73. $this->messageManager->addSuccess(__('You updated your password.'));
  74. $this->getResponse()->setRedirect(
  75. $this->backendDataHelper->getHomePageUrl()
  76. );
  77. }
  78. } catch (\Magento\Framework\Validator\Exception $exception) {
  79. $this->messageManager->addMessages($exception->getMessages());
  80. $this->_redirect(
  81. 'adminhtml/auth/resetpassword',
  82. ['_nosecret' => true, '_query' => ['id' => $userId, 'token' => $passwordResetToken]]
  83. );
  84. }
  85. }
  86. }