Facebook使用PHP登录

时间:2017-12-16 01:44:56

标签: php facebook login sdk

我在使用Facebook功能登录时遇到了麻烦。 我的登录页面中有一个按钮,该按钮链接到以下.php文件。如果登录成功,我将它发送到welcome.php,只需要一个句子进行测试。在我的facebook开发人员设置中,我已经放在域localhost下,因为我在localhost工作,所以网站URL也一样。

问题?当我点击它我得到一个错误说我的会话没有启动。我不知道该怎么办。 Error when clicking login with facebook button

    <?php  

    session_start();
    error_reporting(E_ALL);
    ini_set('display_errors', true);
    ini_set('display_startup_errors', true);
    ini_set('memory_limit', '-1');

    //include o ficheiro do autoloader do SDK
    require_once "LoginFB/lib/Facebook/autoload.php";

    //include required libraries
    use Facebook\Facebook;
    use Facebook\Exceptions\FacebookResponseException;
    use Facebook\Exceptions\FacebookSDKException;


    $appId = 'myID'; //Facebook App ID
    $appSecret = 'mySecret'; //Facebook App Secret
    $redirectURL = 'http://localhost/Driveaway/PedroQuinta/welcome.php'; //Callback URL
            $fbPermissions = array('email');  //Optional permissions

    $fb = new Facebook(array(
        'app_id'=>$appId,
        'app_secret'=>$appSecret,
        'default_graph_version' => 'v2.9',

    ));

    //get redirect login helper
    $helper = $fb->getRedirectLoginHelper();

    //Try to get access token
    try {
        //already login
        if(isset($_SESSION['face_access_token'])){
            $accessToken = $_SESSION['face_access_token'];
        }else{
            $accessToken = $helper->getAccessToken();
        }

        if(isset($accessToken)){
            if(isset($_SESSION['face_access_token'])){
                $fb->setDefaultAccessToken($_SESSION['face_access_token']);
            }else{
                //put short-lived access token in session
                $_SESSION['face_access_token'] =(string)$accessToken;

                // OAuth 2.0 client handler helps manage access tokens
                $oAuth2Client = $fb->getOAuth2Client();

                //Exchanges a short-lived access token for a long-lived one
                $longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['face_access_token']);
                $_SESSION['face_access_token']=(string)$longLivedAccessToken;

                //Set default access token to be used in script
                $fb->setDefaultAccessToken($_SESSION['face_access_token']);

            }

            //redirects the user back to the same page if url has "code" parameter in query string

            if(isset($_GET['code'])){
                //getting user facebook profile info
                try {
                    $profileRequest = $fb->get('/me?fields=name, email');
                    $fbUserProfile = $profileRequest->getGraphNode()->asArray();
                    //here you can redirect to your homepage.
                    echo "<pre/>";
                    print_r($fbUserProfile);
                } catch (FacebookResponseException $e) {
                    echo 'Graph returned an error: ' . $e->getMessage();
                    session_destroy();
                    // Redirect user back to app login page
                    header("Location: ./");
                    exit;
                } catch (FacebookSDKException $e) {
                    echo 'Facebook SDK returned an error: ' . $e->getMessage();
                    exit;
                }
            }
        }else{
            //get login url

            $loginUrl = $helper->getLoginUrl($redirectURL, $fbPermissions);
            header("Location: ".$loginUrl);
        }
    } catch (FacebookResponseException $e) {
        echo 'Graph returned an error: ' . $e->getMessage();
        exit;
    } catch (FacebookSDKException $e) {
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
        exit;
    }

   ?>

0 个答案:

没有答案