如何在PHP中将值传递给FacebookRedirectLoginHelper


How can I pass value to FacebookRedirectLoginHelper in PHP

我使用Facebook PHP SDK,并尝试将令牌id从一个页面发送到另一个页面。我使用这个代码-http://www.krizna.com/demo/login-with-facebook-using-php/.我使用

$helper = new FacebookRedirectLoginHelper('http://www.krizna.com/fbconfig.php' );

我尝试过发送这样的值:

$helper = new FacebookRedirectLoginHelper('http://www.krizna.com/fbconfig.php?value='.$value );  

但当我尝试时,我没有在fbconfig.php文件中获得值:

$value = $_GET['value'];

我也使用会话发送值,但它不起作用。如何将值发送到FacebookRedirectLoginHelper(fbconfig.php)?

fbconfig.php

<?php
session_start();
$value = $_GET['value_new'];
$fb = new 'Facebook'Facebook([
    'app_id' => $config->facebook->app_id,
    'app_secret' => $config->facebook->app_secret
]);
$helper = $fb->getRedirectLoginHelper();
try {
    if ($access_token = $helper->getAccessToken()) {
        try {
            // Returns a `Facebook'FacebookResponse` object with the requested fields
            $response = $fb->get('/me?fields=name,id,email,picture', $access_token);
            $user = $response->getGraphUser();
            $fbid = $user->getId();            // To Get Facebook ID
            $fbfullname = $user->getName();    // To Get Facebook full name
            $femail = $graphObject->getEmail();// To Get Facebook email ID
            $_SESSION['FBID'] = $fbid;
            $_SESSION['FULLNAME'] = $fbfullname;
            $_SESSION['EMAIL'] = $femail;
            //Then do whatever you want with that data
            $value = $_SESSION['value'];
            header("Location: index.php?value_new=$value");
            } catch ('Facebook'Exceptions'FacebookResponseException $e) {
            error_log('Graph returned an error: ' . $e->getMessage());
        } catch ('Facebook'Exceptions'FacebookSDKException $e) {
            error_log('Facebook SDK returned an error: ' . $e->getMessage());
        }
    }
} catch ('Facebook'Exceptions'FacebookResponseException $e) {
    // When Graph returns an error
    error_log('Graph returned an error: ' . $e->getMessage());
} catch ('Facebook'Exceptions'FacebookSDKException $e) {
    // When validation fails or other local issues
    error_log('Facebook SDK returned an error: ' . $e->getMessage());
}

index.php

<?php if (isset($_SESSION['FBID'])): ?><!--  After user login  -->
<div class="container">
    <h1>value <?php $value_new = $_GET['value_new']; echo $value_new; ?></h1>
</div>
<? endif ?>

您不应该试图通过查询字符串/$_GET[] superglobal传递facebook访问令牌。你应该使用的是facebook推荐的$_SESSION[] superglobal。

由于您正试图将访问令牌从一个页面传递到另一个页面,因此让我们调用第一个页面上的访问令牌$access_token。要将其传递到另一个页面,请执行以下操作:

第1页:

<?php 
  session_start(); //the very top of your document
  // ... other code ...
  $_SESSION['access_token'] = $access_token;
  // ... other code ...
?>

第2页:

<?php 
  session_start(); //the very top of your document
  // ... other code ...
  $access_token = $_SESSION['access_token'];
  // ... other code ...
?>

这应该有效,如果对你有效,请告诉我。

这个答案使用的是Facebook PHP SDK v5.1.2,它改编自我在自己的项目中使用的方法。它还假设正在使用composer自动加载。

登录页面

session_start();
$fb = new 'Facebook'Facebook([
    'app_id' => $config->facebook->app_id, //Change these to yours
    'app_secret' => $config->facebook->app_secret
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email'];
$this->view->facebook_url = $helper->getLoginUrl('http://www.krizna.com/fbconfig.php', $permissions);

fbconfig.php(或任何你想要的重定向页面)

session_start();
$fb = new 'Facebook'Facebook([
    'app_id' => $config->facebook->app_id,
    'app_secret' => $config->facebook->app_secret
]);
$helper = $fb->getRedirectLoginHelper();
try {
     if ($access_token = $helper->getAccessToken()) {
        try {
            // Returns a `Facebook'FacebookResponse` object with the requested fields
            $response = $fb->get('/me?fields=name,id,email,picture', $access_token);
            $user = $response->getGraphUser();
            $fbid = $user->getId();              // To Get Facebook ID
            $fbfullname = $user->getName(); // To Get Facebook full name
            $femail = $graphObject->getEmail();    // To Get Facebook email ID
            $_SESSION['FBID'] = $fbid;           
            $_SESSION['FULLNAME'] = $fbfullname;
            $_SESSION['EMAIL'] =  $femail;
            //Then do whatever you want with that data
        } catch('Facebook'Exceptions'FacebookResponseException $e) {
            error_log('Graph returned an error: ' . $e->getMessage());
        } catch('Facebook'Exceptions'FacebookSDKException $e) {
            error_log('Facebook SDK returned an error: ' . $e->getMessage());
        }
    }
} catch ('Facebook'Exceptions'FacebookResponseException $e) {
    // When Graph returns an error
    error_log('Graph returned an error: ' . $e->getMessage());
} catch ('Facebook'Exceptions'FacebookSDKException $e) {
    // When validation fails or other local issues
    error_log('Facebook SDK returned an error: ' . $e->getMessage());
}

希望这能给你一个帮助。我毫不怀疑我的代码已经改编自以前的StackOverflow答案或教程。