Facebook перенаправляет на URL-адрес холста вместо страницы холста после авторизации приложения

Я получил помощь от этот пост, чтобы выяснить, как для перенаправления на страницу авторизации Facebook, когда кто-то обращается к странице холста, но еще не авторизовал приложение.

Теперь я ожидал, что после того, как пользователь авторизует разрешения, FB перенаправит на страницу холста (https://app.facebook.com/myapp). Но он перенаправляет на URL-адрес холста (https://myhostingapp.com/game.php?.. .)

Ожидается ли это, или мы можем что-то сделать, чтобы контролировать это. Как сообщить API о перенаправлении на страницу холста после авторизации?

Прямо сейчас я могу подумать об использовании $_SERVER[HTTP_REFERER], чтобы увидеть, перехожу ли я со страницы авторизации, и если да, то снова перенаправляю страницу на страницу холста. Но я надеюсь, что может быть гораздо лучший способ сделать это

URL-код холста:

if (Config::$fbAvailalbe){ //see below how this variable is derived
    echo "fb is available";
    $facebook = new Facebook(array(
      'appId'  => Config::$appId,
      'secret' => Config::$appSecret,
    ));

    $user = $facebook->getUser();

    if ($user) {
        echo "app installed";
      try {
        // Proceed knowing you have a logged in user who's authenticated.
        $profile = $facebook->api('/me');
      } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
      }
    }

    if (!$user) {
      echo " app not installed gonna redirect"; 
      $scope = "scope=email,read_stream,read_friendlists,publish_stream";
      $redirect = $facebook->getLoginUrl(
                    array(
                        'canvas' => 1,
                        'fbconnect' => 0,
                        'req_perms' => $scope
                        )
                    );
      echo '<script>top.location="' . $redirect . '";</script>';
      exit();
      //header("Location: $redirect".$scope);
    } 

    if ($profile){
        $firstName = $profile['first_name'];
        $sid = $profile['id'];
        var_dump($profile);
    }else{
        echo "unable to get profile";
    }

}else{

    echo "fb unavailable, using dmmy";
    $firstName = "Dummy Name";
    $sid = Config::$testsid;

}

Фрагмент из Config.php

    //this is to derive the $fbAvailable variable
    //we get this condition satisfied when we run the page runs from fb canvas 
    if (isset($_SERVER['HTTP_REFERER'])){

        if (substr_count($_SERVER['HTTP_REFERER'],'apps.facebook.com')){
            self::$fbAvailalbe = 1;
        }
    }

person dejjub-AIS    schedule 19.12.2012    source источник


Ответы (1)


см. документацию здесь.

Две ошибки в коде

Ошибка №1:

$scope = "scope = email,read_stream,read_friendlists,publish_stream";

Ошибка №2:

Согласно документации здесь (как сейчас)

req_params — это область действия.

Не уверен насчет параметров «canvas» и «fbconnect», которые потенциально могут быть проигнорированы, поскольку они больше не поддерживаются.

$redirect = $facebook->getLoginUrl(
                    array(
                        'scope' => $scope,
                        'redirect_uri' => 'https://app.facebook.com/myapp'
                        )
                    );
person hemc4    schedule 19.12.2012
comment
Теперь я получаю Произошла ошибка. Повторите попытку позже. Это связано с устаревшими параметрами? developers.facebook.com/docs/reference/php/facebook-getLoginUrl не имеет параметров canvas и fbconnect - person dejjub-AIS; 19.12.2012
comment
упс, похоже, что «req_perms» теперь просто «область действия»? - person dejjub-AIS; 19.12.2012
comment
Теперь я выяснил точную ошибку и отредактировал код в вашем ответе. Я приму это, как только вы примете мои правки :) - person dejjub-AIS; 19.12.2012