Facebook PHP-SDK在页面刷新后似乎丢失了用户ID

问题描述 投票:3回答:3

似乎登录正常,我可以在这里登录,接受应用程序(第一次),然后显示用户信息,例如姓名/图片/等。>

但是,当我刷新页面时,用户ID会返回0,我必须再次登录-我不确定是什么问题,每次页面加载或类似操作时我都必须重新启动它吗?我不知道,我将发布一些代码-由于它们是一堆单独的文件,可能会很难:

fb_login.php-

<?php
    require_once("fb_login/facebook.php");
    $facebook = new Facebook(array(
      'appId' => 'APP_ID',
      'secret'=> 'APP_SECRET',
      'cookie'=> 'true'
    ));
    $userId = $facebook->getUser();

    if ($userId) {
        $userId = $facebook->getUser();
         echo("userID is: $userId");
}
    else{
        header("Location: {$loginURL}");
         echo("userId is: $userId");
    }


?>

navbar.php-

<?php
              if($userId){
                 try {
                  $user_profile = $facebook->api('/me','GET');
                  echo '<li><a href="#">Welcome: ' . $user_profile['name'] . '</a></li>';
                  echo '<li><img src="https://graph.facebook.com/' . $user_profile['username'] . '/picture"><li>';
                  echo '<li class="divider-vertical"></li>';
                 } catch (FacebookApiException $e) {
                    $login_url = $facebook->getLoginUrl(); 
                    echo '<li>Please <a href="' . $login_url . '">login.</a></li>';
                    error_log($e->getType());
                    error_log($e->getMessage());
                 }
              }
              else{
                  echo '<li><a href="newUser.php">Sign Up</a></li>
                      <li class="divider-vertical"></li>';
              }
            ?>
<?php
                  if ($userId) { 
                    // echo("userID is: $userId");
                    // $params = array( 'next' => 'http://localhost/bcbooks-repo/index_new.php' );

                    $logoutUrl = $facebook->getLogoutUrl(); // $params is optional. 
                    echo '<li><a href="' . $logoutUrl . '">Log Out</a></li>';
                    $facebook->destroySession();
                  }
                  else{?>
<?php
                $userId = $facebook->getUser();
                $accessToken = $facebook->getAccessToken();
                $params = array(
                    'scope' => 'read_stream, friends_likes',
                    'redirect_uri' => 'http://localhost/bcbooks-repo/index_new.php'
                );

                $loginUrl = $facebook->getLoginUrl($params);
                echo '<a href="' . $loginUrl . '" class="btn btn-primary btn-block" type="button" id="sign-in-facebook">Sign In with Facebook</a>';
                                        ?>
<?php } ?>

index.php-

<?php
  require_once 'inc/FB_login.php';
require_once 'inc/navbar.php'; ?>

已登录-“已登录”

页面刷新后“刷新后”>>

控制台结果“控制台结果”

似乎我的登录正常,在这里我可以登录,接受应用程序(第一次),然后显示用户信息,例如姓名/图片/等。但是,当我刷新页面时,userid返回到0 ...

php facebook facebook-php-sdk
3个回答
2
投票

在Fabio建议的基础上尝试使用此代码(显然用您的实际应用ID替换了YOUR_APP_ID)

     <div id="fb-root"></div>
  <script>     

  window.fbAsyncInit = function() {
    FB.init({
      appId: 'YOUR_APP_ID', 
      status: true,
         cookie: true,
         xfbml: true,
       channelUrl:'/channel.html',
      frictionlessRequests: true,
      useCachedDialogs: true,
      oauth: true
    });
    FB.Event.subscribe('auth.login', function(response) {
      window.location.reload();
    });
    FB.Event.subscribe('auth.logout', function(response) {
      window.location.reload();
    });
  };
(function(d){
   var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
   js = d.createElement('script'); js.id = id; js.async = true;
      js.src = "//connect.facebook.net/en_US/all.js";
    ref.parentNode.insertBefore(js, ref);
     }(document));
      </script>

1
投票

尽管您正在使用cookie选项TRUE加载facebook PHP SDK,但服务器端无法猜测用户是否仍在登录您的网站,或者他是否已更改为其他帐户,等等。>>

如果要在所有页面上都保留旧字体,则必须将javascript SDK与PHP SDK结合使用。为此,您只需要在每个页面中加载javascript SDK,请将其放在需要与Facebook交互的每个页面上,就在<body>标签旁边:


0
投票

尝试像这样声明Cookie中的userID:

$user = $facebook->getUser();
$expire=time()+60*60*24*30;
setcookie("user", $user, $expire);

0
投票

我面临着同样的问题。我在下面重新陈述了问题。

我正在使用Javascript SDK进行Web应用程序的Facebook登录。我能够使用facebook SDK和登录功能设置登录屏幕。登录后,我必须重新加载另一个页面(登录页面视图)。但是,当我重新加载到其他页面并查询Facebook登录状态时,它已断开连接。看起来在页面重新加载期间,facebook SDK不维护访问令牌。我必须再次登录才能获得访问令牌。

© www.soinside.com 2019 - 2024. All rights reserved.