| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Customer\Controller\Ajax;
- use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
- use Magento\Customer\Api\AccountManagementInterface;
- use Magento\Framework\Exception\EmailNotConfirmedException;
- use Magento\Framework\Exception\InvalidEmailOrPasswordException;
- use Magento\Framework\App\ObjectManager;
- use Magento\Customer\Model\Account\Redirect as AccountRedirect;
- use Magento\Framework\App\Config\ScopeConfigInterface;
- use Magento\Framework\Exception\LocalizedException;
- use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory;
- use Magento\Framework\Stdlib\CookieManagerInterface;
- /**
- * Login controller
- *
- * @method \Magento\Framework\App\RequestInterface getRequest()
- * @method \Magento\Framework\App\Response\Http getResponse()
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class Login extends \Magento\Framework\App\Action\Action implements HttpPostActionInterface
- {
- /**
- * @var \Magento\Customer\Model\Session
- */
- protected $customerSession;
- /**
- * @var AccountManagementInterface
- */
- protected $customerAccountManagement;
- /**
- * @var \Magento\Framework\Json\Helper\Data $helper
- */
- protected $helper;
- /**
- * @var \Magento\Framework\Controller\Result\JsonFactory
- */
- protected $resultJsonFactory;
- /**
- * @var \Magento\Framework\Controller\Result\RawFactory
- */
- protected $resultRawFactory;
- /**
- * @var AccountRedirect
- */
- protected $accountRedirect;
- /**
- * @var ScopeConfigInterface
- */
- protected $scopeConfig;
- /**
- * @var CookieManagerInterface
- */
- private $cookieManager;
- /**
- * @var CookieMetadataFactory
- */
- private $cookieMetadataFactory;
- /**
- * Initialize Login controller
- *
- * @param \Magento\Framework\App\Action\Context $context
- * @param \Magento\Customer\Model\Session $customerSession
- * @param \Magento\Framework\Json\Helper\Data $helper
- * @param AccountManagementInterface $customerAccountManagement
- * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
- * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
- * @param CookieManagerInterface $cookieManager
- * @param CookieMetadataFactory $cookieMetadataFactory
- */
- public function __construct(
- \Magento\Framework\App\Action\Context $context,
- \Magento\Customer\Model\Session $customerSession,
- \Magento\Framework\Json\Helper\Data $helper,
- AccountManagementInterface $customerAccountManagement,
- \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
- \Magento\Framework\Controller\Result\RawFactory $resultRawFactory,
- CookieManagerInterface $cookieManager = null,
- CookieMetadataFactory $cookieMetadataFactory = null
- ) {
- parent::__construct($context);
- $this->customerSession = $customerSession;
- $this->helper = $helper;
- $this->customerAccountManagement = $customerAccountManagement;
- $this->resultJsonFactory = $resultJsonFactory;
- $this->resultRawFactory = $resultRawFactory;
- $this->cookieManager = $cookieManager ?:
- ObjectManager::getInstance()->get(CookieManagerInterface::class);
- $this->cookieMetadataFactory = $cookieMetadataFactory ?:
- ObjectManager::getInstance()->get(CookieMetadataFactory::class);
- }
- /**
- * Get account redirect.
- *
- * @deprecated 100.0.10
- * @return AccountRedirect
- */
- protected function getAccountRedirect()
- {
- if (!is_object($this->accountRedirect)) {
- $this->accountRedirect = ObjectManager::getInstance()->get(AccountRedirect::class);
- }
- return $this->accountRedirect;
- }
- /**
- * Account redirect setter for unit tests.
- *
- * @deprecated 100.0.10
- * @param AccountRedirect $value
- * @return void
- */
- public function setAccountRedirect($value)
- {
- $this->accountRedirect = $value;
- }
- /**
- * Initializes config dependency.
- *
- * @deprecated 100.0.10
- * @return ScopeConfigInterface
- */
- protected function getScopeConfig()
- {
- if (!is_object($this->scopeConfig)) {
- $this->scopeConfig = ObjectManager::getInstance()->get(ScopeConfigInterface::class);
- }
- return $this->scopeConfig;
- }
- /**
- * Sets config dependency.
- *
- * @deprecated 100.0.10
- * @param ScopeConfigInterface $value
- * @return void
- */
- public function setScopeConfig($value)
- {
- $this->scopeConfig = $value;
- }
- /**
- * Login registered users and initiate a session.
- *
- * Expects a POST. ex for JSON {"username":"user@magento.com", "password":"userpassword"}
- *
- * @return \Magento\Framework\Controller\ResultInterface
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
- */
- public function execute()
- {
- $credentials = null;
- $httpBadRequestCode = 400;
- /** @var \Magento\Framework\Controller\Result\Raw $resultRaw */
- $resultRaw = $this->resultRawFactory->create();
- try {
- $credentials = $this->helper->jsonDecode($this->getRequest()->getContent());
- } catch (\Exception $e) {
- return $resultRaw->setHttpResponseCode($httpBadRequestCode);
- }
- if (!$credentials || $this->getRequest()->getMethod() !== 'POST' || !$this->getRequest()->isXmlHttpRequest()) {
- return $resultRaw->setHttpResponseCode($httpBadRequestCode);
- }
- $response = [
- 'errors' => false,
- 'message' => __('Login successful.')
- ];
- try {
- $customer = $this->customerAccountManagement->authenticate(
- $credentials['username'],
- $credentials['password']
- );
- $this->customerSession->setCustomerDataAsLoggedIn($customer);
- $this->customerSession->regenerateId();
- $redirectRoute = $this->getAccountRedirect()->getRedirectCookie();
- if ($this->cookieManager->getCookie('mage-cache-sessid')) {
- $metadata = $this->cookieMetadataFactory->createCookieMetadata();
- $metadata->setPath('/');
- $this->cookieManager->deleteCookie('mage-cache-sessid', $metadata);
- }
- if (!$this->getScopeConfig()->getValue('customer/startup/redirect_dashboard') && $redirectRoute) {
- $response['redirectUrl'] = $this->_redirect->success($redirectRoute);
- $this->getAccountRedirect()->clearRedirectCookie();
- }
- } catch (LocalizedException $e) {
- $response = [
- 'errors' => true,
- 'message' => $e->getMessage(),
- ];
- } catch (\Exception $e) {
- $response = [
- 'errors' => true,
- 'message' => __('Invalid login or password.'),
- ];
- }
- /** @var \Magento\Framework\Controller\Result\Json $resultJson */
- $resultJson = $this->resultJsonFactory->create();
- return $resultJson->setData($response);
- }
- }
|