wake-up-neo.net

Wie melde ich mich mit Facebook SDK ab?

Ich benutze ein facebook-Login für meine Website mit facebook php sdk.

Was mir aufgefallen ist, dass der logout-Link nichts bewirkt. Nachdem ich mich abgemeldet habe, kann der Benutzer immer noch auf der Site navigieren. Hier ist mein Code in 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>"
?>

Diese code funktioniert einwandfrei beim Anmelden. Der Abmeldelink sollte die Sitzung zerstören. Hier ist die Kopfzeile der Seite:

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

Das Problem mit meiner logout.php Seite ist, dass sie die Sitzung überhaupt nicht erkennt. Ich weiß nicht, ob dies ein facebook api Problem oder ein php Problem ist.

Wie meldet man den Benutzer mit dem Facebook SDK ab?

9
Mina Gabriel

Sie können sich wie folgt von Ihrer Website sowie von Facebook abmelden, indem Sie die URL Ihrer Website zum nächsten Parameter angeben und die Sitzung zerstören

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

Sie müssen sie auch von Ihrer Website abmelden UND Sie müssen verhindern, dass sich Ihre Website automatisch an Ihren Benutzer erinnert und ihn sofort erneut anmeldet.

Deaktivieren Sie den Code, der Ihren Benutzer automatisch anmeldet, und versuchen Sie erneut, sich abzumelden. Durch das Zerstören der Sitzung wird Ihre Website nicht daran gehindert, eine brandneue gültige Sitzung für den erinnerten Benutzer zu erstellen.

19
Needhi Agrawal

Hier ist der PHP Abmeldecode für meine Website, mit dem ein Benutzer bei Facebook an- und abgemeldet wird. Sie müssen die Sitzung nicht zerstören, um den Benutzer abzumelden. Technisch gesehen müssen Sie Ihrer eigenen Website lediglich signalisieren, dass diese bestimmte Sitzung möglicherweise nicht verwendet wird, um den Benutzer einzulassen.

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;
    }
?>

Setzen Sie dann in jeder PHP-Datei, die Sie ohne einen angemeldeten Benutzer verhindern möchten, Folgendes an die Spitze:

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

Mit diesem Code wird der Benutzer automatisch angemeldet. Wenn er den Abmeldecode aufruft, lässt die Site ihn erst wieder ein, wenn er sich erneut anmeldet.

1
Eric Leschinski

Sie müssen session_start() auf allen Seiten aufrufen, auf denen Sitzungen verwendet werden.

Um jemanden von der Sitzung abzumelden (dh zu löschen), können Sie session_destroy() verwenden.

Schließlich wird header('example.com'); eigentlich nichts tun, haben Sie vor, eine Umleitung durchzuführen? In diesem Fall sollten Sie `header ('Location: http://example.com/ ') verwenden.

EDIT: Entschuldigung, ich hatte das nicht richtig gelesen, was ist das zweite Code-Snippet? Ist das deine logout.php Seite?

Soweit ich mit der Facebook-API weiß, sollten Sie Ihren Benutzern beim Aufrufen von getLogoutUrl() den Link und nicht Ihren eigenen logout.php senden, wenn sie auf den Link klicken.

0
Rudi Visser

Das Abmelden von Benutzern von Facebook kann schwierig sein. Das funktioniert bei mir

// 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

ANTWORTEN

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

wenn die Anmeldung in einer Sitzung initialisiert wird, wird die Anmeldefunktion offenbar unterbrochen, wenn eine dieser session -Variablen auf null gesetzt wird, und der Benutzer wird aufgefordert, sich erneut anzumelden

0
Mina Gabriel