Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AjaxLogin.php
Go to the documentation of this file.
1 <?php
8 
9 use Magento\Captcha\Helper\Data as CaptchaHelper;
12 
13 class AjaxLogin
14 {
18  protected $helper;
19 
23  protected $sessionManager;
24 
28  protected $resultJsonFactory;
29 
33  protected $serializer;
34 
38  protected $formIds;
39 
48  public function __construct(
49  CaptchaHelper $helper,
52  array $formIds,
53  \Magento\Framework\Serialize\Serializer\Json $serializer = null
54  ) {
55  $this->helper = $helper;
56  $this->sessionManager = $sessionManager;
57  $this->resultJsonFactory = $resultJsonFactory;
59  ->get(\Magento\Framework\Serialize\Serializer\Json::class);
60  $this->formIds = $formIds;
61  }
62 
70  public function aroundExecute(
71  \Magento\Customer\Controller\Ajax\Login $subject,
72  \Closure $proceed
73  ) {
74  $captchaFormIdField = 'captcha_form_id';
75  $captchaInputName = 'captcha_string';
76 
78  $request = $subject->getRequest();
79 
80  $loginParams = [];
81  $content = $request->getContent();
82  if ($content) {
83  $loginParams = $this->serializer->unserialize($content);
84  }
85  $username = $loginParams['username'] ?? null;
86  $captchaString = $loginParams[$captchaInputName] ?? null;
87  $loginFormId = $loginParams[$captchaFormIdField] ?? null;
88 
89  if (!in_array($loginFormId, $this->formIds) && $this->helper->getCaptcha($loginFormId)->isRequired($username)) {
90  return $this->returnJsonError(__('Provided form does not exist'));
91  }
92 
93  foreach ($this->formIds as $formId) {
94  if ($formId === $loginFormId) {
95  $captchaModel = $this->helper->getCaptcha($formId);
96  if ($captchaModel->isRequired($username)) {
97  $captchaModel->logAttempt($username);
98  if (!$captchaModel->isCorrect($captchaString)) {
99  $this->sessionManager->setUsername($username);
100  return $this->returnJsonError(__('Incorrect CAPTCHA'));
101  }
102  }
103  }
104  }
105  return $proceed();
106  }
107 
113  private function returnJsonError(\Magento\Framework\Phrase $phrase): \Magento\Framework\Controller\Result\Json
114  {
115  $resultJson = $this->resultJsonFactory->create();
116  return $resultJson->setData(['errors' => true, 'message' => $phrase]);
117  }
118 }
__construct(CaptchaHelper $helper, SessionManagerInterface $sessionManager, JsonFactory $resultJsonFactory, array $formIds, \Magento\Framework\Serialize\Serializer\Json $serializer=null)
Definition: AjaxLogin.php:48
__()
Definition: __.php:13