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='/bg" . $logoutUrl . "'>Logout</a>";
// } else {
//  $loginUrl = $facebook->getLoginUrl();
//  echo "<a href='/bg" . $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='/bg" . $logoutUrl . "'>Logout</a>";
} else {
    $loginUrl = $facebook->getLoginUrl(Array(
        "redirect_uri" => "http://localhost/php-sdk/index.php?"
    ));
    echo "<a href='/bg" . $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