我正在登录facebook并从网站注销。因此,如果用户想要登录该网站,他将点击Facebook登录,当他点击退出时,他将自动从Facebook和该网站注销。所以我为此完成了我的代码 在index.html中,我的代码就像这样
<div id="fb-root"></div>
<script type="text/javascript">
//<![CDATA[
window.fbAsyncInit = function() {
FB.init({
appId : 'XXXXXXXXXXXXX', // App ID
channelURL : '', // Channel File, not required so leave empty
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
oauth : true, // enable OAuth 2.0
xfbml : false // parse XFBML
});
};
// logs the user in the application and facebook
function login(){
FB.getLoginStatus(function(r){
if(r.status === 'connected'){
window.location.href = 'fbconnect.php';
}else{
FB.login(function(response) {
if(response.authResponse) {
//if (response.perms)
window.location.href = 'fbconnect.php';
} else {
// user is not logged in
}
},{scope:'email'}); // which data to access from user profile
}
});
}
// Load the SDK Asynchronously
(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>
<a href='#' onclick='login();'>Facebook Login</a>
在fbconnect.php中,我的代码就像这样
<?php
require 'src/facebook.php';
$facebook = new Facebook(array(
'appId' => 'XXXXXXXXXXXXXXXXX',
'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'cookie' => true,
));
$user = $facebook->getUser();
$loginUrl = $facebook->getLoginUrl();
//echo "<a href='$loginUrl'>login</a>";
$logoutUrl = $facebook->getLogoutUrl();
//echo $loginUrl;
if($user){
$_SESSION['user_info'] = $user;
$_SESSION['user_pro']= $facebook->api('/me');
echo $_SESSION['user_pro']['first_name'];
echo $_SESSION['user_pro']['last_name'];
echo '<pre>';
//print_r($_SESSION);
echo '</pre>';
}
else{
echo 'not logged in ';
}
echo "<a href='logout.php'>log out </a>"
?>
在logout.php中,我的代码看起来像这样
<?php
require 'src/facebook.php'; //including the facebook php sdk
$facebook = new Facebook();
$token = $facebook->getAccessToken();
$url = 'index.html';
$facebook->destroySession();
session_destroy();
header('Location: '.$url);
?>
这一切都是在网站注销,但它没有从Facebook注销。那么有人可以告诉我如何同时从Facebook和网站注销?任何帮助和建议将非常值得赞赏。感谢
答案 0 :(得分:0)
不要使用任何重定向<a href='logout.php'>log out </a>
只需要在行动facebook session destroy
if(isset($_GET['action']) && $_GET['action'] === 'logout'){
$facebook->destroySession();
}
然后您可以使用您的站点会话销毁 有关详细信息: - PHP SDK - Facebook Logout
答案 1 :(得分:0)
是的,这不会从Facebook注销。
我发现您也在使用JS SDK,因此您需要使用JS API进行注销。你可以这样做
echo '<a href="#" onclick = "fb_logout();" >Logout </a>';
你需要添加以下JS函数,我看你已经有了FB.login
<script>
function fb_logout(){
if (FB.getAuthResponse()) {
FB.logout(function(){
top.location.href = 'logout.php'
});
}else{
top.location.href = 'logout.php'
}
}
</script>
确保在fbconnect.php文件中有以下JS,以便触发FB功能 所以完整的代码是
<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({appId: '<?php echo FACEBOOK_APP_ID ; ?>', status: true, cookie: true, oauth: true,
xfbml: true});
};
(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);
}());
function fb_logout(){
if (FB.getAuthResponse()) {
FB.logout(function(){
top.location.href = 'logout.php'
});
}else{
top.location.href = 'logout.php'
}
}
</script>
在文件logout.php
中,您可以处理网站的注销代码。
另外,要使用PHP SDK生成注销,您需要执行
$params = array( 'next' => 'page after logout' );
$logouturl = $facebook->getLogoutUrl($params); // $params is optional.
<a href="<?php echo $logouturl; ?>"> Logout </a>
我建议使用JS SDK进行注销,它肯定会起作用,也会从Facebook注销。