0

Я использую Hybridauth социальный логин и при проверке подлинности пользователя с Facebook, я получаю следующее сообщение об ошибке:Предупреждение: array_key_exists. Как решить это предупреждение?

Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /hybridauth/Hybrid/thirdparty/Facebook/base_facebook.php on line 1328

Моя догадка (вероятно, неправильно), почему это может происходить потому, что параметры, используемые для передачи к Hybridauth поступает из URL-адреса браузера, и у меня есть две страницы - регистр & connected_with = facebook. Hybridauth требует только второго ...

Он фактически аутентифицируется, но я хочу избавиться от этой ошибки. Почему это предупреждение происходит? Есть ли способ скрыть это?

Это немного, что ошибки:

/** 
    * Get the base domain used for the cookie. 
    */ 
    protected function getBaseDomain() { 
    // The base domain is stored in the metadata cookie if not we fallback 
    // to the current hostname 
    $metadata = $this->getMetadataCookie(); 
    if (array_key_exists('base_domain', $metadata) && 
     !empty($metadata['base_domain'])) { 
     return trim($metadata['base_domain'], '.'); 
    } 
    return $this->getHttpHost(); 
    } 

EDIT: извините, это этот код предупреждение исходит от:

/** 
    * Destroy the current session 
    */ 
    public function destroySession() { 
    $this->accessToken = null; 
    $this->signedRequest = null; 
    $this->user = null; 
    $this->clearAllPersistentData(); 

    // Javascript sets a cookie that will be used in getSignedRequest that we 
    // need to clear if we can 
    $cookie_name = $this->getSignedRequestCookieName(); 
    if (array_key_exists($cookie_name, $_COOKIE)) { 
     unset($_COOKIE[$cookie_name]); 
     if (!headers_sent()) { 
     $base_domain = $this->getBaseDomain(); 
     setcookie($cookie_name, '', 1, '/', '.'.$base_domain); 
     } else { 
     // @codeCoverageIgnoreStart 
     self::errorLog(
      'There exists a cookie that we wanted to clear that we couldn\'t '. 
      'clear because headers was already sent. Make sure to do the first '. 
      'API call before outputing anything.' 
     ); 
     // @codeCoverageIgnoreEnd 
     } 
    } 
    } 

ответ

1

Похоже getMetadataCookie() не всегда возвращает массив, возможно, потому, cookie еще не установлен. Вы можете проверить, что это фактически массив, прежде чем использовать его как таковой;

if (is_array($metadata) && array_key_exists('base_domain', $metadata) && 

EDIT: Вы добавили больше кода, то же самое относится и к array_key_exists() в новом коде. Если вы не уверены, действительно ли он настроен на массив, если файл cookie не установлен, сначала проверьте.

+0

спасибо за помощь, я не совсем понимаю, но есть ли у вас какие-либо идеи, почему он все равно будет аутентифицироваться? было ли это предупреждение для меня проблемой? – gray

+1

спасибо, вы указали мне в правильном направлении .. Я просто взял предложение all if: «if (array_key_exists ($ cookie_name, $ _COOKIE))», так как он также говорит, что нам нужно очистить файл cookie «если мы сможем «... возможно, просто продолжайте и очистите это ... и предупреждение ушло ... может быть, не лучшее решение, но предупреждение ушло – gray

Смежные вопросы