似乎登录正常,我可以在这里登录,接受应用程序(第一次),然后显示用户信息,例如姓名/图片/等。>
但是,当我刷新页面时,用户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 ...
在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>
尽管您正在使用cookie选项TRUE加载facebook PHP SDK,但服务器端无法猜测用户是否仍在登录您的网站,或者他是否已更改为其他帐户,等等。>>
如果要在所有页面上都保留旧字体,则必须将javascript SDK与PHP SDK结合使用。为此,您只需要在每个页面中加载javascript SDK,请将其放在需要与Facebook交互的每个页面上,就在<body>
标签旁边:
尝试像这样声明Cookie中的userID:
$user = $facebook->getUser();
$expire=time()+60*60*24*30;
setcookie("user", $user, $expire);
我面临着同样的问题。我在下面重新陈述了问题。
我正在使用Javascript SDK进行Web应用程序的Facebook登录。我能够使用facebook SDK和登录功能设置登录屏幕。登录后,我必须重新加载另一个页面(登录页面视图)。但是,当我重新加载到其他页面并查询Facebook登录状态时,它已断开连接。看起来在页面重新加载期间,facebook SDK不维护访问令牌。我必须再次登录才能获得访问令牌。