如何使用facebook SDK注销用户


How to log out user using facebook SDK?

我使用facebook登录到使用facebook php sdk的网站。

我注意到logout链接没有任何作用。注销后,用户仍然可以浏览网站。这是我在facebook.php:中的代码

<?php
    require 'src/facebook.php';
    $facebook = new Facebook(array(
           'appId'  => '*************',
           'secret' => '******************************',
    ));
    $user = $facebook->getUser();
    $loginUrl = $facebook->getLoginUrl();
    echo "<a href='$loginUrl'>login</a>";
    $logoutUrl = $facebook->getLogoutUrl();
    echo $loginUrl; 
    if($user){
        session_start() ; 
        $_SESSION['user_info'] = $user; 
        $_SESSION['user_pro']= $facebook->api('/me');
        print_r($_SESSION);
    }
    else{
        echo 'not logged in '; 
    }
    echo "<a href='example.com/logout.php'>log out </a>"
?>

code在登录时运行良好。注销链接应会破坏会话。这是页面的标题:

<?php 
    print_r($_SESSION) ; 
    header('example.com') ; 
?>

我的logout.php页面的问题是它根本没有检测到会话。我不知道这是facebook api问题还是我的php问题。

如何使用facebookSDK将用户注销?

您可以从您的网站和facebook注销,如下所示,将您的网站url提供给下一个参数并销毁会话

$token = $facebook->getAccessToken();
$url = 'https://www.facebook.com/logout.php?next=' . YOUR_SITE_URL .
  '&access_token='.$token;
session_destroy();
header('Location: '.$url);

你还必须将他们从你的网站中注销,并且你必须防止你的网站自动记住你的用户并立即重新登录。

禁用自动登录用户的代码,然后再次尝试注销。销毁会话不会阻止您的网站为记住的用户创建全新的有效会话。

这是我的网站的PHP注销代码,该代码允许用户使用facebook登录和注销。你不必破坏会话来注销用户,从技术上讲,你所要做的就是向你自己的网站发出信号,表明这个特定的会话可能不会被用来让用户进入

logout.php:

<?php
    require_once("facebook-php-sdk-6c82b3f/src/facebook.php");
    $config = array();
    $config['appId'] = '2911111111146';
    $config['secret'] = 'a6eaaaaaaaaaaaaaaaaaaaaaaaaaad1a';
    $config['fileUpload'] = false;
    $facebook = new Facebook($config);
    $logouturl = $facebook->getLogoutUrl();
    $_SESSION['user_facebook_email'] = "";
    $_SESSION['ask_user_to_login'] = true;
    header("Location: showquestions.php");
?>

index.php:

<?php
    require_once("facebook-php-sdk-6c82b3f/src/facebook.php");
    $config = array();
    $config['appId'] = '2911111111146';
    $config['secret'] = 'a6eaaaaaaaaaaaaaaaaaaaaaaaaaad1a';
    $config['fileUpload'] = false;
    $facebook = new Facebook($config);
    $userId = $facebook->getUser();
    if ($_SESSION['ask_user_to_login'] == true || $userId == 0){
      $loginUrl = $facebook->getLoginUrl();
      $_SESSION['ask_user_to_login'] = false;
      echo "<button type='button' onClick='"window.location='$loginUrl''">" .
           "<img src='picture.gif' alt='Login with facebook'/>" .
           "</button>";
      exit;
    }
    else
    {
      $userInfo = $facebook->api('/' + $userId);
      session_cache_expire (150000);  //set the cache expire to 15000 minutes
      $_SESSION['user_facebook_email'] = $userInfo['email'];
      $_SESSION['facebook'] = $facebook;      
      header("Location: showquestions.php");
    }
    $userInfo = $facebook->api('/' + $userId);
    echo "Welcome" . $userInfo['email'];
?>

login.php:

<?php
    session_start();        
    if (isset($_SESSION['user_facebook_email']) !== true || 
        $_SESSION['user_facebook_email'] == "")
    {
        header("Location: index.php");
        exit;
    }
?>

然后,在每个想要阻止在没有登录用户的情况下访问的php文件中,将其放在首位:

<?php
    require("log2.php");
?>

使用此代码,用户将自动登录,如果他们调用注销代码,则在他们再次登录之前,网站不会允许他们登录。

从facebook注销用户可能很困难。这对我有效

// Get an instance of the Facebook class
$facebook = $this->facebook_instance_factory();
// Destroy the session so that no Facebook data is held
$facebook->destroySession();
$logout = $facebook->getLogoutUrl();
$facebook->setAccessToken('');
// Redirect the user to the logout url, facebook will redirect him to our page
wp_redirect( $logout );

您需要在将使用会话的所有页面上调用session_start()

要使某人退出会话(即清除会话),可以使用session_destroy()

最后,header('example.com');实际上不会做任何事情,您打算执行重定向吗?如果是,则应使用"header("位置:http://example.com/');

编辑:很抱歉我没有正确阅读,第二个代码片段是什么?这是你的logout.php页面吗?

据我所知,使用Facebook API时,当你调用getLogoutUrl()时,当用户点击链接时,你应该发送给他们,而不是你自己的logout.php

答案

  $_SESSION['fb_(your_APP_ID)_access_token'] = '' ;

当初始化登录会话时,似乎如果我们将这些session变量中的任何一个设置为null,就会中断登录功能,并要求用户再次登录