/** * Dispatch request * * @return ResponseInterface */ public function execute() { $facebookHelper = $this->facebook->getRedirectLoginHelper(); try { $accessToken = $facebookHelper->getAccessToken(); if (isset($accessToken)) { $facebookUser = $this->facebook->get('/me?fields=' . static::FIELDS, $accessToken)->getGraphUser(); $customer = $this->customerRepository->getByFacebookId($facebookUser->getId()); if ($this->customerSession->getId()) { $this->customer = $this->customerSession->getCustomerData(); $this->createOrUpdateAndLogin($facebookUser, $accessToken); $this->messageManager->addSuccess(__("Your Facebook account is now connected to your account at our store.")); } else { if (!is_null($customer)) { $this->customer = $customer; $this->createOrUpdateAndLogin($facebookUser, $accessToken); $this->messageManager->addSuccess(__("You have successfully logged in using your Facebook account.")); } else { try { $this->customer = $this->customerRepository->get($facebookUser->getEmail()); } finally { $customer = $this->createOrUpdateAndLogin($facebookUser, $accessToken); if ($this->customer->getId() == $customer->getId()) { $this->messageManager->addSuccess(__("We have discovered you already have an account at our store." . " Your Facebook account is now connected to your store account.")); } else { $this->messageManager->addSuccess(__("Your Facebook account is now connected to your new user account at our store.")); } } } } } else { throw new FacebookSDKException('The Facebook code is null'); } } catch (FacebookSDKException $e) { $this->logger->addError($e->getMessage()); $this->messageManager->addError(__("Oops. Something went wrong! Please try again later.")); } catch (InputException $e) { $this->logger->addError($e->getMessage()); $this->messageManager->addError(__("Some of required values is not received. Please, check your Facebook settings." . "Required fields: email, first name, last name.")); } catch (Exception $e) { $this->logger->addError($e->getMessage()); $this->messageManager->addError(__("Oops. Something went wrong! Please try again later.")); } $this->_redirect($this->_redirect->getRefererUrl()); }
/** * @return string */ public function getLoginUrl() { $facebookHelper = $this->facebook->getRedirectLoginHelper(); return $facebookHelper->getLoginUrl($this->getUrl('facebook/login'), ['scope' => 'email']); }