2013-05-08 1 views
0

Я только начал изучать php, и сейчас я работаю над приложением Facebook. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что кнопка входа в систему остается на экране даже после того, как пользователь обратился к своей учетной записи. У кого-нибудь есть объяснение? Вот мой код:Кнопка входа не исчезает после входа в систему

<?php if (isset($user_profile)) { 
    ?> 
     user logged in 
<?php } else { ?> 

    <div class="fb-login-button" data-scope="email"></div> 

<?php } ?> 

Я включил файл, где $ user_profile определяется как $ user_profile = $ facebook-> API ('/ я');

+0

Я думаю, что ваша переменная '$ user_profile' не установлена, а? Пожалуйста, покажите нам, где вы установите переменную. – sebastian

+0

@sebastian У меня есть файл с именем 'utils.php', и я устанавливаю' $ user_profile' там. Я использовал 'require_once', чтобы распознать переменную. –

ответ

0

Проверьте выход $ user_profile с помощью команды var_dump ($ user_profile). Вы также можете добавить команду exit после var_dump, чтобы приостановить выполнение. Из вашего примера кода запускается блок else, что означает проблему с переменной $ user_profile.

+0

Нет, это означает, что если пользователь не вошел в систему, появится кнопка входа в систему.Однако проблема заключается в том, что после входа в систему он не исчезает. –

+0

Вы пробовали повторять блок else в php-модуле, например echo '

' или блок elseif, используя} elseif (! Isset ($ user_profile)) {... – user466764

0

Вы включили регистрацию ошибок php? что говорит журнал?

Это довольно трудно, чтобы помочь вам отлаживать, не видя ваш utils.php

IsSet это функция, которая возвращает истину, если переменная создается и имеет значение.

По вашим счетам это означает, что ваш $ facebook-> api ('/ me') возвращает нуль или эта строка кода вообще не запускается.

Не знаю точно, что пошло не так с вашими кодами, потому что, не видя, что вы делаете, я только предполагаю.

В любом случае, поскольку вы используете PHP, как насчет того, чтобы исключить необходимость в кнопке входа в систему? просто попросите войти в систему, как только они войдут в приложение (если они не вошли в Facebook), если сеанс Facebook получен, покажите им фактическое приложение, и у вас уже будет информация о профиле пользователя. Как это звучит?

Вот что я обычно делаю в своих приложениях Facebook. Вы можете настроить его так, как вам нравится в соответствии с вашими потребностями.

config.php

<?php 
//set facebook application id, secret key and api key here 
    $fbconfig['appid'] = "xxxxxxxxxxxxxxxx"; 
    $fbconfig['secret'] = "xxxxxxxxxxxxxxxxxxxxxxxxx"; 

    $protocol = "http"; 

    if(isset($_SERVER['HTTPS'])) 
    { 
     if($_SERVER['HTTPS']) 
     { 
      $protocol = "https"; 
     } 
    } 
//set application urls here 
    $domainName = $_SERVER['HTTP_HOST']; 

    $appNamespace = "[APP_NAMESPACE]"; 
    $appFolder = "[WEB_FOLDER_NAME]"; 

    $fbconfig['appBaseUrl'] = $protocol."://apps.facebook.com/".$appNamespace; 
    $fbconfig['baseUrl'] = $protocol."://" . $domainName . "/" . $appFolder; 

    $uid = null; // facebook user id 
    $me = null; // JSON object containing the basic user information 

    $redirect_url = $fbconfig['baseUrl']."/redirect.php"; 
    $cancel_url = $protocol."://www.facebook.com"; 
    $allow_url = $fbconfig['appBaseUrl']; 

    $profileURL = $protocol."://www.facebook.com/profile.php?id="; 
?> 

redirect.php

<?php 
include_once "config.php"; 
if (isset($_REQUEST["error"])) 
{ 
    ?> 
    <script type="text/javascript"> 
     top.location.href = "<?=$cancel_url?>"; 
    </script> 
    <?php 
} 
else 
{ 
    ?> 
    <script type="text/javascript"> 
     top.location.href = "<?=$allow_url?>"; 
    </script> 
    <?php 

} 


?> 

fbmain.php

<?php 
include_once "../facebook_sdk/facebook.php"; 
include_once "config.php"; 


    $uid = null; // facebook user id 
    $me = null; // JSON object containing the basic user information 

// Create our Application instance (replace this with your appId and secret). 
$facebook = new Facebook(array(
    'appId' => $fbconfig['appid'], 
    'secret' => $fbconfig['secret'], 
    'cookie' => true, 
)); 

$signedRequest = $facebook->getSignedRequest(); 

// We may or may not have this data based on a $_GET or $_COOKIE based session. 
// 
// If we get a session here, it means we found a correctly signed session using 
// the Application Secret only Facebook and the Application know. We dont know 
// if it is still valid until we make an API call using the session. A session 
// can become invalid if it has already expired (should not be getting the 
// session back in this case) or if the user logged out of Facebook. 
$user = $facebook->getUser(); 
$access_token = $facebook->getAccessToken(); 

$logoutUrl = $facebook->getLogoutUrl(); 
$loginUrl = $facebook->getLoginUrl(
       array(
        //state what are the required perms 
        'redirect_uri' => $redirect_url, 
        'scope' => 'email, user_likes, user_status, friends_likes, friends_status', 
       ) 
      ); 

// Session based API call. 
if ($user) { 
    try { 
    $me = $facebook->api('/me'); 
    if($me) 
    { 
     $uid = $me['id']; 
     $_SESSION['fbId'] = $me['id']; 
    } 
    } 
    catch (FacebookApiException $e) { 
    error_log($e); 
    } 
} 
else { 
    echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>"; 
    exit; 
} 

function outputData($d){ 
    echo '<pre>'; 
    print_r($d); 
    echo '</pre>'; 
} 
?> 

после этого мне просто нужно включить «fbmain.php» на любую страницу, для которой требуется сеанс facebook. Обычно я включаю include в свой «index.php».

index.php

<?php 
include_once "fbmain.php"; 
?> 

<html> 
    <body id="my_body"> 
    <div id="fb-root"></div> 
    <script> 
     window.fbAsyncInit = function() { 
     FB.init({ 
      appId: '<?php echo $facebook->getAppID() ?>', 
      cookie: true, 
      xfbml: true, 
      oauth: true 
     }); 

     FB.Canvas.setAutoGrow(); 
     FB.Canvas.scrollTo(0,0); 
     }; 

     (function() { 
     var e = document.createElement('script'); e.async = true; 
     e.src = document.location.protocol + 
      '//connect.facebook.net/en_US/all.js'; 
     document.getElementById('fb-root').appendChild(e); 
     }()); 
    </script> 

    <?php 
     if ($me) 
     { 
      echo "Facebook ID: ".$me['id']. "<br />"; 
      echo "Facebook Name: ".$me['name']; 
     } 
    ?> 

    </body> 
</html> 

последующие страницы сайта будут использовать переменные сессии, чтобы сделать API вызовы с помощью Javascript SDK вместо повторного прохождения через весь процесс аутентификации.

+0

не возвращается null. После входа в систему появляется как вход пользователя, так и кнопка входа в систему. Я перезагружаюсь после входа в систему с помощью window.location = window.location, потому что приложение может использоваться в кадре –

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

  • Нет связанных вопросов^_^