Beispiel #1
1
 /**
  * @override
  * @see _P::execute()
  * @return \Magento\Framework\Controller\Result\Redirect
  */
 public function execute()
 {
     // 2016-06-05
     // @see urldecode() здесь вызывать уже не надо, проверял.
     /** @var string $redirectUrl */
     $redirectUrl = df_request($this->redirectUrlKey()) ?: df_url();
     /**
      * 2016-12-02
      * Если адрес для перенаправления покупателя передётся в адресе возврата,
      * то адрес для перенаправления там закодирован посредством @see base64_encode()
      * @see \Dfe\BlackbaudNetCommunity\Url::get()
      */
     if (!df_starts_with($redirectUrl, 'http')) {
         $redirectUrl = base64_decode($redirectUrl);
     }
     try {
         /** @var Session|DfSession $s */
         $s = df_customer_session();
         if (!$this->mc()) {
             /**
              * 2016-12-01
              * Учётная запись покупателя отсутствует в Magento,
              * и в то же время информации провайдера SSO недостаточно
              * для автоматической регистрации покупателя в Magento
              * (случай Blackbaud NetCommunity).
              * Перенаправляем покупателя на стандартную страницу регистрации Magento,
              * где часть полей будет уже заполнена данными от провайдера SSO,
              * а пароль будет либо скрытым, либо необязательным полем.
              * После регистрации свежесозданная учётная запись будет привязана
              * к учётной записи покупателя в провайдере SSO.
              */
             $redirectUrl = df_customer_url()->getRegisterUrl();
         } else {
             /**
              * 2015-10-08
              * По аналогии с @see \Magento\Customer\Controller\Account\LoginPost::execute()
              * https://github.com/magento/magento2/blob/1.0.0-beta4/app/code/Magento/Customer/Controller/Account/LoginPost.php#L84-L85
              */
             $s->setCustomerDataAsLoggedIn($this->mc()->getDataModel());
             $s->regenerateId();
             /**
              * По аналогии с @see \Magento\Customer\Model\Account\Redirect::updateLastCustomerId()
              * Напрямую тот метод вызвать не можем, потому что он protected,
              * а использовать весь класс @see \Magento\Customer\Model\Account\Redirect пробовал,
              * но оказалось неудобно из-за слишком сложной процедуры перенаправлений.
              */
             if ($s->getLastCustomerId() != $s->getId()) {
                 $s->unsBeforeAuthUrl()->setLastCustomerId($s->getId());
             }
         }
     } catch (\Exception $e) {
         df_message_error($e);
     }
     $this->postProcess();
     return $this->resultRedirectFactory->create()->setUrl($redirectUrl);
 }
Beispiel #2
0
/**
 * 2015-11-09
 * Сегодня заметил странную ситуацию, что метод @uses \Magento\Customer\Model\Session::isLoggedIn()
 * для авторизованных посетителей стал почему-то возвращать false
 * в контексте вызова из @used-by \Df\Sso\Button::_toHtml()().
 * Также заметил, что стандартный блок авторизации в шапке страницы
 * определяет авторизованность посетителя совсем по-другому алгоритму:
 * @see \Magento\Customer\Block\Account\AuthorizationLink::isLoggedIn()
 * Вот именно этот алгоритм мы сейчас и задействуем.
 * @return bool
 */
function df_customer_logged_in()
{
    return df_customer_session()->isLoggedIn() || df_customer_logged_in_2();
}