it-swarm.com.ru

Как выйти из системы с помощью 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

Как вы выходите из системы с помощью Facebook SDK?

9
Mina Gabriel

Вы можете выйти из своего сайта, а также из Facebook, как указано ниже, указав URL своего сайта для следующего параметра и уничтожив сеанс.

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

Вы также должны отключить их от своего веб-сайта И вы должны запретить вашему веб-сайту автоматически запоминать вашего пользователя и немедленно повторно регистрировать его. 

Отключите код, который автоматически входит в систему вашего пользователя, и попробуйте снова выйти из системы. Уничтожение сеанса не помешает вашему сайту создать новый действительный сеанс для запомненного пользователя.

19
Needhi Agrawal

Вот код выхода 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");
?>

С помощью этого кода пользователь автоматически входит в систему, и если он вызывает код выхода из системы, сайт не пропускает его до тех пор, пока он не войдет снова.

1
Eric Leschinski

Вам нужно вызывать session_start() на всех страницах, где будут использоваться сессии.

Чтобы выйти из сеанса (т.е. очистить его), вы можете использовать session_destroy().

Наконец, header('example.com'); на самом деле ничего не сделает, вы собираетесь выполнить перенаправление? Если это так, вы должны использовать `header ('Location: http://example.com/ ');

Правка: Извините, я не прочитал это правильно, что второй фрагмент кода? Это ваша страница logout.php?

Насколько мне известно о API Facebook, когда вы вызываете getLogoutUrl(), именно туда вы должны отправлять своих пользователей, когда они нажимают на ссылку, а не свой собственный logout.php.

0
Rudi Visser

Выход пользователей из 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 );
0
Nicola Peluchetti

ОТВЕТ

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

когда инициализируется сеанс входа в систему, кажется, что если установить для любой из этих переменных session значение null, это нарушит функцию входа в систему и попросит пользователя снова войти в систему. 

0
Mina Gabriel