使用Javascript和PHP登录Facebook

使用Javascript和PHP登录Facebook,javascript,php,facebook,cookies,Javascript,Php,Facebook,Cookies,几天来我一直在努力解决这个问题,但似乎不明白我做错了什么。这个想法是让用户使用Javascript登录,并在将用户信息输入数据库之前通过PHP进行重新验证,但它一直说不能从cookie中获得cookie集或OAuth数据 index.php: var appLoginFlag = false; var appAccessToken = null; window.fbAsyncInit = function() { FB.init({

几天来我一直在努力解决这个问题,但似乎不明白我做错了什么。这个想法是让用户使用Javascript登录,并在将用户信息输入数据库之前通过PHP进行重新验证,但它一直说不能从cookie中获得cookie集或OAuth数据

index.php:

    var appLoginFlag = false;
    var appAccessToken = null;

    window.fbAsyncInit = function() {
        FB.init({
            appId: 'xxxxxxxxx',
            cookie: true,
            status: true,
            xfbml: true,
            oauth: true,
            version: 'v2.2'
        });

        checkLoginState();
    };

    function statusChangeCallback(response) {
        if (response.status === 'connected') {
            appLoginFlag = true;
            if (response.authResponse) {
                console.log(response.authResponse);
                FB.api('/me?fields=id,name,first_name,last_name,email', function(response) {
                    console.log('Email: ' + response.email);
                    console.log('Name: ' + response.name);
                    $.ajax({
                        type: "POST",
                        url: "user_insert.php",
                        success: function(result) {
                            document.getElementById('login-wrap').innerHTML = 'Hi <strong>' + response.first_name + '</strong>!';
                        }
                    });
                });                         
            }
        }
        else {
            console.log(response.status);
            appLoginFlag = false;
        }
    }

    function checkLoginState() {
        FB.getLoginStatus(function(response) {
            statusChangeCallback(response);
        });
    }

    (function(d, s, id){
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {
            return;
        }
        js = d.createElement(s);
        js.id = id;
        js.src = "//connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    } (document, 'script', 'facebook-jssdk'));

    function FBLogin() {
        FB.login(function(response) {
            FB.api("/me/feed", "post", {message: "Some message"}, statusChangeCallback(response));
        },
        {scope: 'public_profile, email, publish_actions'
        });
    }
user_insert.php:

<?php session_start();
    require_once __DIR__ . '/facebook-sdk-v5/autoload.php';

    $fb = new Facebook\Facebook([
        'app_id' => 'xxxxxxxxxxxxxx',
        'app_secret' => 'xxxxxxxxxxxxxxxxxxxx',
        'default_graph_version' => 'v2.2',
    ]);

    $helper = $fb->getJavaScriptHelper();

    try {
        $accessToken = $helper->getAccessToken();
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        echo 'Graph returned an error: ' . $e->getMessage();
        exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
        exit;
    }

    if (! isset($accessToken)) {
        echo 'No cookie set or no OAuth data could be obtained from cookie.';
        exit;
    }

    echo '<h3>Access Token</h3>';
    var_dump($accessToken->getValue());

    $_SESSION['fb_access_token'] = (string) $accessToken;

    // Now you can redirect to another page and use the
    // access token from $_SESSION['facebook_access_token']

    // instructions to insert into database
?>

最后,我做对了。问题在于API版本。在我的Facebook应用程序仪表板中,我在为V2.2编码时使用了V2.4