Ссылка для выхода из Facebook OAuth 2.0 PHP не выходит из системы на моем сайте, но на facebook

Хорошо, как следует из заголовка, я пытался заставить OAuth Facebook работать на моем локальном хосте /, я боролся с различными проблемами, но я просто не знаю, что случилось с моей последней проблемой, которая заключается в том, что страница загружается, и если пользователь вошел в систему, он показывает URL-адрес выхода из системы и UID, как и должно быть, и когда я нажимаю ссылку выхода, он выводит пользователя из Facebook, но при перенаправлении или перезагрузке UID все еще появляется, как и ссылка для выхода . Короче говоря, я не могу заставить свой сайт, работающий на моем локальном хосте, вывести меня из Facebook И на моем сайте! Любые мысли были бы огромной помощью. Вот мой код

<?php

session_start();
// store session data

include "src/facebook.php";

$facebook = new Facebook(Array(
    "appId" => "xxx",
    "secret" => "xxx"
));

$user = $facebook->getUser();

echo "UID: " . $user . "<br/>";

    // THIS WAS MY FIRST TRY WHICH DIDNT SUCCEED
// if ($user) {
//  $logoutUrl = $facebook->getLogoutUrl();
//  echo "<a href='" . $logoutUrl . "'>Logout</a>";
// } else {
//  $loginUrl = $facebook->getLoginUrl();
//  echo "<a href='" . $loginUrl . "'>Login</a>";
// }

// WITH THE ABOVE CODE I GET:

// An error occurred with PHP-SDK. Please try again later.
// API Error Code: 191
// API Error Description: The specified URL is not owned by the application
// Error Message: Invalid redirect_uri: Given URL is not allowed by the Application configuration.

    // THIS WAS MY SECOND TRY AFTER SEARCHING FOR INFO, 
    // ALL I DID WAS MANUALLY ADD THE
    // REDIRECT URI AND ADDED ? , THE REASON IS IF I DIDN'T ADD IT,
    // IT WOULD GIVE ME AN CSRF ERROR
    // STATING THAT THE STATE VALUE IS NOT CORRECT, I SEARCHED FOR THE SOLUTION
    // FOR THAT PROBLEM WITH NO LUCK SO I TRIED THIS

if ($user) {
    $logoutUrl = $facebook->getLogoutUrl();
    echo "<a href='" . $logoutUrl . "'>Logout</a>";
} else {
    $loginUrl = $facebook->getLoginUrl(Array(
        "redirect_uri" => "http://localhost/php-sdk/index.php?"
    ));
    echo "<a href='" . $loginUrl . "'>Login</a>";
}

// WITH THE ABOVE CODE I NOW GET A UID AND THE LOGOUT URL DOES APPEAR, BUT ONCE I CLICK IT
// THE USER IS LOGGED OUT LIKE HE SHOULD BUT THEN ON REDIRECT OR RELOAD THE UID STILL 
// APPEARS AND SO DOES THE LOGOUT LINK, EVEN THOUGH THE USER IS NOT LOGGED IN!!

?>

person user1549913    schedule 25.07.2012    source источник


Ответы (1)


Это связано с идентификатором пользователя в вашем сеансе PHP, и процесс выхода из системы, который происходит на сервере facebook, не может очистить это для вас. Вы можете увидеть, что сохранено в сеансе, проверив вывод var_dump($_SESSION);

Чтобы определить, зарегистрирован ли uid, хранящийся в вашем сеансе, вы можете попробовать использовать объект SDK для извлечения чего-либо из API-интерфейса графа, например ($facebook->api('/me')), и исключения исключения, а также очистить сеанс, если они происходят.

Еще одним решением может быть добавление next к вызову getLogoutUrl() (точно так же, как в getLoginUrl()), и когда facebook отправляет пользователя обратно на этот URL-адрес, вы очищаете переменные сеанса. Реализация facebook по умолчанию имеет destroySession на класс BaseFacebook (по какой-то причине не указан в официальных документах SDK).

person complex857    schedule 26.07.2012
comment
спасибо за ваш ответ, я как бы понял это вчера, и я собираюсь реализовать ваше второе решение о добавлении redirect_uri при выходе из системы и уничтожении переменных сеанса. Это было очевидно, еще раз спасибо за ваш ответ! - person user1549913; 27.07.2012