Разбор fbsr_cookie - PullRequest
       3

Разбор fbsr_cookie

1 голос
/ 25 декабря 2011

Я реализовал пример подключения Facebook с моим сайтом Codeigniter.Я пытаюсь обновить код подключения Facebook, но не могу разобраться, как разобрать fbsr_cookie, который заменил fbs_cookie.

У меня есть следующий код -

function get_facebook_cookie() 
    {
        // get the fb app id, and secret from CI config source
        $CI =& get_instance();
        $app_id = $CI->config->item('facebook_app_id');
        $application_secret = $CI->config->item('facebook_app_secret');
        if(isset($_COOKIE['fbs_' . $app_id])){
            $args = array();
            parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
            ksort($args);
            $payload = '';
            foreach ($args as $key => $value) {
                    if ($key != 'sig') {
                    $payload .= $key . '=' . $value;
                    }
            }
            if (md5($payload . $application_secret) != $args['sig']) {
                    return null;
            }
            return $args;
        }
        else{
            return null;
        }
    }

изатем получить идентификатор пользователя Facebook -

function getUser()
    {
        $cookie = $this->get_facebook_cookie();
        $user = @json_decode(file_get_contents( 'https://graph.facebook.com/me?access_token=' . $cookie['access_token']), true);
        return $user;
    }

Кто-нибудь знает, как я могу изменить это для работы с fbsr_cookie?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 декабря 2011

Новый формат cookie с именем fbsr_APPID на самом деле представляет собой signed_request, который довольно легко анализировать, и документация показывает, как именно это сделать (см. «Проверка и декодирование» в signed_request Документация

0 голосов
/ 12 сентября 2013

Эта функция выглядит так же, как расширение XTA из codeigniter (теперь не поддерживается).Мало того, что вам нужно изменить fbs_ на fbsr_, там происходит совершенно другой набор парсинга токенов:

вот обновленная функция:

function get_facebook_cookie() {
     $CI =& get_instance();
     $app_id = $CI->config->item('facebook_app_id');
     $application_secret = $CI->config->item('facebook_app_secret');
      if(isset($_COOKIE['fbsr_' . $app_id])){
         list($encoded_sig, $payload) = explode('.', $_COOKIE['fbsr_' . $app_id], 2);

         $sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
         $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

         if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
             return null;
         }
         $expected_sig = hash_hmac('sha256', $payload,
         $application_secret, $raw = true);
          if ($sig !== $expected_sig) {
              return null;
          }
          $token_url = "https://graph.facebook.com/oauth/access_token?"
         . "client_id=" . $app_id . "&client_secret=" . $application_secret. "&redirect_uri=" . "&code=" . $data['code'];

          $response = @file_get_contents($token_url);
          $params = null;
          parse_str($response, $params);
          $data['access_token'] = $params['access_token'];
          return $data;
      }else{
          return null;
     }
}

Это пришло из этого полезное сообщение в блоге с некоторыми другими подробностями о проблеме.

Также убедитесь, что у вас есть allow_url_fopen для вызова @file_get_contents.Символ @ скрывает эти ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...