/** * Create or update user by using data from facebook and login to store * * @param GraphUser $facebookUser * @param AccessToken $accessToken * * @return CustomerInterface */ private function createOrUpdateAndLogin(GraphUser $facebookUser, AccessToken $accessToken) { if (!$this->customer->getId()) { $this->customer->setEmail($facebookUser->getEmail()); $this->customer->setFirstname($facebookUser->getFirstName()); $this->customer->setLastname($facebookUser->getLastName()); $this->customer->setMiddlename($facebookUser->getMiddleName()); $this->customer->setGender((int) ($facebookUser->getGender() == 'male')); } $this->customer->setCustomAttribute('sf_id', $facebookUser->getId()); $this->customer->setCustomAttribute('sf_access_token', serialize($accessToken)); if ($this->customer->getId()) { $customer = $this->customerRepository->save($this->customer); } else { $customer = $this->accountManagement->createAccount($this->customer); } $this->login($customer->getId()); return $customer; }
/** * Dispatch request * * @return ResponseInterface */ public function execute() { $customer = $this->customerSession->getCustomerData(); $accessTokenAttribute = $customer->getCustomAttribute('sf_access_token'); $facebookUserIdAttribute = $customer->getCustomAttribute('sf_access_token'); if ($accessTokenAttribute && $facebookUserIdAttribute) { /** @var $accessToken \Facebook\Authentication\AccessToken */ $accessToken = unserialize($accessTokenAttribute->getValue()); $facebookUserId = $facebookUserIdAttribute->getValue(); try { $this->facebook->delete('/' . $facebookUserId . '/permissions', [], $accessToken); $customer->setCustomAttribute('sf_id', null); $customer->setCustomAttribute('sf_access_token', null); $this->customerRepository->save($customer); $this->messageManager->addSuccess(__('You have successfully disconnected your Facebook account from our store account.')); } catch (Exception $e) { $this->logger->addError($e->getMessage()); $this->messageManager->addError(__("Oops. Something went wrong! Please try again later.")); } } return $this->_redirect($this->_redirect->getRefererUrl()); }