Ошибка страницы диалога oauth в приложении facebook php canvas

Я пытаюсь создать приложение для холста facebook. Я использую facebook php-sdk и cakephp.

Это моя функция входа в систему: -

public function login() {

       $app_id = "xxxxxxxxxxx";
       $app_secret = "xxxxxxxxxxxxxxxxxx";
       $canvas_page = "https://apps.facebook.com/xxxxxxx";
       $scope = 'email,publish_actions';
       $facebook = new Facebook(array(
                                'appId'  => $app_id,
                                'secret' => $app_secret
                                ));

       $user = $facebook->getUser();

       if ($user) {

                try {

                // Proceed knowing you have a logged in user who's authenticated.
                $user_profile = $facebook->api('/me');
                $access_token = $facebook->getAccessToken();
                $fbid = $user_profile['id'];
                pr($user_profile);

                } catch (FacebookApiException $e) {

                error_log($e);
                $user = null;

                }

        } else {

                $loginUrl = $facebook->getLoginUrl(array(
                                                   'scope' => $scope,
                                                   'redirect_uri' => $canvas_page
                                                   ));
                print('<script> top.location.href=\'' . $loginUrl . '\'</script>');
        }

}

Кажется, это работает, если пользователь уже аутентифицирован. Но для нового пользователя вместо отображения диалогового окна oauth выдается эта ошибка: -

"Given URL is not allowed by the Application configuration.: One or more of the given URLs is not allowed by the App's settings. It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains."

Я тестирую его на локальном хосте. поэтому мой URL-адрес холста http://localhost/xxxxx/ Может ли кто-нибудь помочь мне здесь?


person Divyanshu Das    schedule 09.01.2014    source источник
comment
Facebook не может определить ваш локальный хост, это должно быть доменное имя.   -  person Abhik Chakraborty    schedule 09.01.2014
comment
@AbhikChakraborty означает ли это, что я не могу разработать приложение facebook на локальном хосте? Я также пытался использовать виртуальный хост, но это тоже не работает. Я также разместил сайт на aws и заменил локальный хост на «ip-адрес»... все равно не повезло   -  person Divyanshu Das    schedule 09.01.2014
comment
Правильно, обычно вам может понадобиться сервер разработки, чтобы запустить проект. Например, у меня есть API, и я получаю запрос с redirect_uri как localhost/xxx. Мой код не может выполнить перенаправление так как перенаправление произойдет на мой локальный хост, а не на ваш, но если я знаю доменное имя, я могу перенаправить на домен.   -  person Abhik Chakraborty    schedule 09.01.2014
comment
Ну, я понимаю, что вы пытаетесь сказать, но если это так, то приложение не должно было работать, даже когда я не использовал аутентификацию. Если я поставлю URL-адрес холста как localhost/yyyy, который является простой html-страницей, он будет работать, но как только я введу код аутентификации, он перестанет работать.   -  person Divyanshu Das    schedule 09.01.2014
comment
Не уверен насчет приложения, но для входа в систему redirect_uri должно быть доменным именем, и то же самое должно быть в настройках вашего приложения.   -  person Abhik Chakraborty    schedule 09.01.2014
comment
если для redirect_uri задано доменное имя, то после входа в систему вместо перехода к приложению на основе холста он перейдет на веб-сайт... Как упоминалось в документах, redirect_uri должен быть apps.facebook.com/xxxx   -  person Divyanshu Das    schedule 09.01.2014


Ответы (1)


Я наконец нашел решение: -

Два шага:-

а) Изменил redirect_uri на http://localhost/xxxxxx

б) Добавлена ​​проверка, имеет ли код get params и установка заголовка на страницу холста.

Правильный код: -

вход в публичную функцию () {

   $app_id = "xxxxxxxxxxx";
   $app_secret = "xxxxxxxxxxxxxxxxxx";
   $canvas_page = "https://apps.facebook.com/xxxxxxx";
   $scope = 'email,publish_actions';
   $facebook = new Facebook(array(
                            'appId'  => $app_id,
                            'secret' => $app_secret
                            ));
   if (isset($_GET['code'])) {
      header("Location: " . $canvas_page);
      exit;
   }

   $user = $facebook->getUser();

   if ($user) {

            try {

            // Proceed knowing you have a logged in user who's authenticated.
            $user_profile = $facebook->api('/me');
            $access_token = $facebook->getAccessToken();
            $fbid = $user_profile['id'];
            pr($user_profile);

            } catch (FacebookApiException $e) {

            error_log($e);
            $user = null;

            }

    } else {

            $loginUrl = $facebook->getLoginUrl(array(
                                               'scope' => $scope,
                                               ));
            print('<script> top.location.href=\'' . $loginUrl . '\'</script>');
    }

}

person Divyanshu Das    schedule 14.01.2014