使用 PHP SDK 进行身份验证后,Facebook 会话为 NULL

2024-02-25

我可以使用我的 Facebook 应用程序登录,但我得到的会话始终为 NULL。 这是我的整个 PHP 代码:

<?php


session_start(); //Session should always be active

  $app_id               = 'mySexyAppID';  //DEV Name: PHP_SDK-Prev-FB\0.0.2b4
  $app_secret       = 'someS3cr3tStuff';
  $required_scope   = 'public_profile, publish_actions,publish_stream,manage_pages,user_groups'; //Permissions required
  $redirect_url         = 'http://localhost/fb/facebook-sdk-v4-sample-files/index2.php'; //FB redirects to this page with a code

  require_once __DIR__ . "/facebook-php-sdk-v4-4.0-dev/autoload.php"; //include autoload from SDK folder

  //define output vars
  $responseMembers_String  = '0';

  //import required class to the current scope
  use Facebook\FacebookSession;
  use Facebook\FacebookRequest;
  use Facebook\GraphUser;
  use Facebook\FacebookRedirectLoginHelper;

  FacebookSession::setDefaultApplication($app_id , $app_secret);
  $helper = new FacebookRedirectLoginHelper($redirect_url);

  /**************************************************************/
  // see if a existing session exists
  if ( isset( $_SESSION ) && isset( $_SESSION['fb_token'] ) ) {
    // create new session from saved access_token
    $session = new FacebookSession( $_SESSION['fb_token'] );

    // validate the access_token to make sure it's still valid
    try {
      if ( !$session->validate() ) {
        $session = null;
      }
    } catch ( Exception $e ) {
      // catch any exceptions
      $session = null;
    }
  }  

  if ( !isset( $session ) || $session === null ) {
    // no session exists
    try {
      $session = $helper->getSessionFromRedirect();
      $_SESSION["FBSession"] = $session;
    } catch( FacebookRequestException $ex ) {
      print_r( $ex->getMessage());
    } catch( Exception $ex ) {
      print_r( $ex->getMessage());
    }

  }

  // see if we have a session
  if ( isset( $session ) ) {
      $_SESSION["SessionSetText"] = "Session set with success!";
  }
  /**************************************************************/



  //if user wants to log out
  if(isset($_GET["log-out"]) && $_GET["log-out"]==1){
      unset($_SESSION["fb_user_details"]);
      //session ver is set, redirect user 
      header("location: ". $redirect_url);
  }

  //Test normal login / logout with session

  if ($session){ //if we have the FB session
      //get user data
      $user_profile = (new FacebookRequest($session, 'GET', '/me'))->execute()->getGraphObject(GraphUser::className());
      $user_accounts = (new FacebookRequest($session, 'GET', '/me/accounts'))->execute()->getGraphObject(GraphUser::className());
      $user_groups = (new FacebookRequest($session, 'GET', '/me/groups'))->execute()->getGraphObject(GraphUser::className());

      //save session var as array
      $_SESSION["fb_user_details"] = $user_profile->asArray(); 
      $_SESSION["accounts"] = $user_accounts->asArray();
      $_SESSION["groups"] = $user_groups->asArray();

      $user_id = ( isset( $_SESSION["fb_user_details"]["id"] ) )? $_SESSION["fb_user_details"]["id"] : "";
      $user_name = ( isset( $_SESSION["fb_user_details"]["name"] ) )? $_SESSION["fb_user_details"]["name"] : "";
      $user_email = ( isset( $_SESSION["fb_user_details"]["email"] ) )? $_SESSION["fb_user_details"]["email"] : "";

      //session var is set, redirect user 
      header("location: ". $redirect_url);

  }

  if(isset($_POST["group_submit"]))
      {
          //user wants informations about a group where he is administrator
          $userGroupId = $_POST["usergroups"];
          //$group_url = '/'.$userGroupId.'/members';

          //request members via facebook graph api  
          /**************************************************/
          $requestMembers = new FacebookRequest($session, 'GET', '/'.$userGroupId.'/members');
          $requestMembers_response = $requestMembers->execute()->getGraphObject()->asArray();

          /**************************************************/

          $responseMembers_String =  $requestMembers_response;
          $_SESSION["GroupMembers"] = $responseMembers_String;
      }
?>

<html>
  <head>
    <meta charset="utf-8" />
    <title>Demo StackOverflow</title>
  </head>

  <body>
  <form id="form" name="form" method="POST" action="index2.php">
          <?php

              if(isset($_SESSION["fb_user_details"]))
              {
                  print 'Hi '.$_SESSION["fb_user_details"]["name"].' you are logged in! [ <a href="?log-out=1">log-out</a> ] ';
              }
              else{
                  //display login url 
                  $login_url = $helper->getLoginUrl( array( 'scope' => $required_scope ) );
                  echo '<a href="'.$login_url.'">Connect with Facebook</a>';
              };
              ?>
          <br />
          <br />
                  <?php
                  if(isset($_SESSION["fb_user_details"]))
                  {
                      print 'Some infos about the current user ['.$_SESSION["fb_user_details"]["first_name"].']: <pre>';
                      print_r($_SESSION["fb_user_details"]);
                      print '</pre>';   
                  };
                  ?>

          <br />
          <select name="usergroups" id="ugroups">
                      <?php 
                          foreach ($_SESSION["groups"]["data"] as $group) {
                              //only fetch groups where user is admin!
                              if($group->administrator)
                              {
                                  echo '<option value="'.$group->id.'">'.$group->name.'</option>';  

                              }
                          } ;
                      ?>
          </select>
          <br />
              <button type="submit" class="button" id="group_submit" name="group_submit">Get some informations!</button><br />
          <label id="GroupMembers" name="GroupMembers"><?php if (!(isset($_SESSION["GroupMembers"]))){print 'not set now!';} elseif(isset($_SESSION["GroupMembers"])) {print 'the selected group has '.$responseMembers_String.' Members';} ?></label><br />
          <label id="lInfos" name="lInfos"><?php if (!(isset($_SESSION["FBSession"]))){print '$session not set!!';} elseif(isset($_SESSION["FBSession"])) {print 'Session set!';} ?></label>
      </form>
  </body>
</html>

当我调用图形函数时(请求组成员:$requestMembers = new FacebookRequest($session, 'GET', '/'.$userSelectedGroupID.'/members');)我收到以下错误:

Catchable fatal error: Argument 1 passed to Facebook\FacebookRequest::__construct() must be an instance of Facebook\FacebookSession, null given

我已经更新了问题并添加了包含所有代码的完整示例。 我意识到,我可以在任何地方进行会话,因为我可以选择用户组。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PHP SDK 进行身份验证后,Facebook 会话为 NULL 的相关文章

  • Laravel 中间件将变量返回给控制器

    我正在对用户进行权限检查 以确定他们是否可以查看页面 这涉及首先通过一些中间件传递请求 我遇到的问题是 在将数据返回到视图本身之前 我在中间件和控制器中复制相同的数据库查询 这是设置的示例 路线 php Route get pages id
  • 检查文件是否要上传?代码点火器

    我有一个带有很少输入和一个文件输入的表单 我想检查文件输入是否为空 如果为空则不要尝试上传 如果不是则尝试上传 我尝试过这样的事情 upld file this gt upload gt data if empty upld file Up
  • 如何 POST 从 PHP 创建的 HTML 表数据

    while row mysql fetch array res echo tr echo td td tr
  • PDO::bindValue() 在使用嵌套 SELECT 进行查询时失败

    我正在使用通过 ODBC 连接的 MSSQL 数据库 使用时PDO bindValue 在具有嵌套 SELECT 语句的查询上 它无法绑定嵌套 SELECT 中的值 在主 SELECT 上没有问题 这是一段失败的示例代码 stmt cmdb
  • 使用 PHP 读取 cookie

    我正在尝试读取我用 javascript 设置的 cookie 特别是 jQuery Cookie 插件 然后我用 PHP 读取它以将其写入数据库 由于某种原因 cookie 是在页面加载时创建的 但在页面刷新之前并不 存在 这意味着我正在
  • PHP Web 应用程序中的 Ace 编辑器

    我正在制作一个小型网络应用程序 允许用户通过以下方式提交 html css 和 javascript 内容王牌编辑器 http ace ajax org 在此编辑器中 将存储的内容回显到编辑器中就足够了 但是无论如何我找不到将用户输入提交到
  • WooCommerce 中的分页

    我使用这个短代码在页面上显示产品的类别 但是当我们使用它时 它不会显示分页 因为我们的类别中有很多产品 我们使用以下代码 product category category snowpeak per page 12 columns 4 or
  • 用于 Eclipse PDT 的 Zend 框架插件

    我安装了 eclipse PDT IDE 版本 1 2 0 我将它与 Dojo 一起使用来开发非常有趣的 Ajax 应用程序 现在我想在我的 eclipse IDE 中启用 Zend 框架 我怎样才能做到这一点 经过一番谷歌搜索后 我尝试了
  • HTML 实体到 PHP 中的普通字符串

    我有一个 PHP 中包含 HTML 实体的字符串 在 html 源中我可以看到 html 实体 但在输出中我的字符串没有 html 实体 like HTML 源代码 a href google com Me nbsp You a 我该如何更
  • 如何在 PHP >= 5.4 的特征中重载类构造函数

    在 PHP 5 中 我可以重载构造函数 以及任何其他方法 但是如果我得到这样的代码 class Base public function construct a b echo a b public function sayHello ech
  • 使用 HybridAuth 登录 Facebook 显示错误 您无法直接访问此页面

    我正在尝试为我的网站编写一个插件 以使用 HybridAuth 与 facebook 连接 类 我刚刚尝试了以下代码 function authenticatewith provider ini set display errors on
  • Woocommerce:添加第二个电子邮件地址不起作用,除非收件人是管理员

    我尝试了多种方法来向 Woocommerce 电子邮件添加其他收件人 但它似乎仅适用于主要收件人是管理员的测试订单 这些是我尝试过的片段 如果订单的客户是管理员 则电子邮件将发送到这两个地址 如果订单包含客户电子邮件地址 则仅发送至该电子邮
  • 通过 HTML 将复杂变量传递给 javascript 的正确方法

    我试图摆脱使用 PHP 的 htmlentities 但我在这里停止了 但后来我想 我不做替换和检查特殊字符 而是只 JSON 整个对象 这提供了一个非常不受欢迎的结果 其中包含大量双引号 那么我应该怎么做呢 我应该为每个图像分配一个数字唯
  • 提交后如何重置表单?

    我有一个简单的表格 假设它需要一个电子邮件地址 提交表单后 消息堆栈会通知用户其地址已成功提交 问题是 提交地址后 带有电子邮件的表单字段仍然包含用户输入的电子邮件地址 我该如何重置该字段 我必须为此使用 JavaScript 吗 谢谢 w
  • 如何在 Laravel 中将秒转换为天小时分钟[重复]

    这个问题在这里已经有答案了 我想将以秒为单位的时间间隔转换为天小时分钟 我已经尝试过了 value 90060 CarbonInterval seconds value gt forHumans 我得到了输出 90060 seconds 我
  • PHP中如何判断字母是大写还是小写?

    我有 UTF 8 格式的文本 也带有变音符号 并且想检查该文本的第一个字母是大写还是小写 这个怎么做 function starts with upper str chr mb substr str 0 1 UTF 8 return mb
  • 如何准备更新查询语句? [复制]

    这个问题在这里已经有答案了 我有一个 mysqli 查询 代码如下 db usag gt query UPDATE Applicant SET phone number phone number street name street nam
  • PHP MCRYPT 加密/解密返回不可见的奇怪字符?

    mcrypt decrypt给了我额外的不可见字符 这些字符通过在页面上回显是不可见的 只能通过将其写入文本文件来查看 也就是说 只显示在页面上就可以了 而且很难被注意到 这是谷歌搜索的代码示例 请指导我正确的用法是什么 有什么问题吗 fu
  • PHP清晰度卷积矩阵

    我正在使用一个卷积矩阵 http www php net manual en function imageconvolution php为了锐度PHP GD我想改变清晰度 level 我会去哪里做出改变如果我想做到的话或多或少尖锐 imag
  • R 语言与 php 集成以获取 R 的结果

    我有以下 R 脚本 assign data path data path lt C Users Owner Desktop R work assign valus to the following three percent train p

随机推荐