Yii Facebook Регистрация - PullRequest
       6

Yii Facebook Регистрация

2 голосов
/ 11 января 2012

Я выполняю регистрацию в Facebook на своем сайте Yii. Я устанавливаю приложение. Для регистрации за один шаг нам необходимо расшифровать данные пользователей Facebook, отправленные через Facebook. Facebook предоставляет код для расшифровки информации. Я реализую этот код, но с ошибкой вроде:

"Неустранимая ошибка: вызов неопределенной функции base64_url_decode () в C: \ wamp \ www \ cma \ app \ protected \ controllers \ SiteController.php в строке 259"

Мой фрагмент кода

public function actionFacebookLogin()
    {
        //error_reporting(E_ALL);
        //ini_set("display_errors", 1);

        $signed_request = $_POST['signed_request'];
        Yii::log("actionFacebookLogin called.....");
        //list($encoded_sig,$payload) = explode('.', $signed_request,2);

        list ($encoded_sig,$payload) = explode('.', $signed_request,2);

        Yii::log('in the list');
        //decode the data
        $sig =  base64_url_decode($encoded_sig);
        $data = json_decode(base64_url_decode($payload), true);

        if(strtoupper($data['algorithm'])!= 'HMAC-SHA256'){
            Yii::log('Unkonwon alogorithm.Expected HMAC-SHA256');
            //return null;
        }


        //check sig
        $expected_sig = hash_hmac('sha256', $payload, $secret,$raw=true);
        if($sig !== $expected_sig){
            Yii::log('Bad Signed JSON Signature');
            //return null;
        }
        //return $data;
        $this->render('facebookview',array('response'=>$data));

    }

      public function base64_url_decode($input)
        {
        return base64_decode(strtr($input, '-_', '+/'));
        }

Я реализую этот код на своем контроллере сайта ...

Может кто-нибудь помочь выяснить, что не так с кодом .. Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 11 января 2012

base64_url_decode () не является стандартной функцией PHP, вам может потребоваться определить ее следующим образом:

function base64_url_encode($input) {
  return strtr(base64_encode($input), '+/=', '-_,');
}

function base64_url_decode($input) {
  return base64_decode(strtr($input, '-_,', '+/='));
}

взято из http://php.net/manual/de/function.base64-encode.php

1 голос
/ 12 января 2012

Спасибо за вашу помощь !!!Но проблема решена ...

Я поместил функцию base64_url_decode в модель, создав новый класс util и названный статической функцией base64_url_decode.Я назвал функцию как util::base64_url_decode.

0 голосов
/ 11 января 2012

Если вы находитесь в классе PHP и base64_url_decode является публичной функцией, вы должны использовать ее как $this->base64_url_decode($input), не так ли?В примере , предоставленном документацией Facebook , это просто function, поэтому вызов его без $this-> работает.

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