ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Facebook PHP SDK v4.0.0:即使在从登录URL授权facebook后,也未设置$session

2019-08-30 22:29:17  阅读:148  来源: 互联网

标签:php facebook facebook-graph-api facebook-php-sdk


更新:问题现在解决了.我所做的就是把这段代码放在一个不同的php文件中:

<?php
Function __autoload($classname) {
    $filename = "./".$classname .".php";
    require_once($filename);
}

use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;

session_start();

FacebookSession::setDefaultApplication('257772307761170','***');

$helper = new FacebookRedirectLoginHelper('http://localhost/parqueeste/login.php');
try {
  $session = $helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {
  // When Facebook returns an error
} catch(\Exception $ex) {
  // When validation fails or other local issues
}
if ($session) {
  echo 'Yeah!!';
}
?>

原始消息:我正在使用Facebook SDK v4.0.0 for PHP创建“通过Facebook登录”.但即使在用户单击登录URL后,$session变量也未定义,因此无法访问用户的数据.这是我的代码:

<?php
session_start();
function __autoload($classname) {
    $filename = "./".$classname .".php";
    require_once($filename);
}

use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;

FacebookSession::setDefaultApplication('257772307761170','****'); //I have the right
app secret on my code, of course.

$helper = new FacebookRedirectLoginHelper('http://localhost/parqueeste/');
$loginUrl = $helper->getLoginUrl();


if(isset($session) AND $session) { // <--- I use isset() so I don't
get a warning everytime I load my site

  try {

    $user_profile = (new FacebookRequest(
      $session, 'GET', '/me'
    ))->execute()->getGraphObject(GraphUser::className());

    echo "Name: " . $user_profile->getName();

  } catch(FacebookRequestException $e) {

    echo "Exception occured, code: " . $e->getCode();
    echo " with message: " . $e->getMessage();

  }   

}
?>

提前致谢!

解决方法:

这里的实际问题是当你调用getLoginUrl()方法时,例如

 $helper = new FacebookRedirectLoginHelper('http://localhost/parqueeste/');
 $loginUrl = $helper->getLoginUrl();

它改变了状态变量.在您的原始问题(在编辑它以包括您的修复程序之前)之前,您在原始代码中验证响应之前调用了此方法,然后它使CSRF检查无效,简而言之说用户尚未登录.我遇到了这个问题完全相同的问题,最好的办法是要么像你在这里一样有一个单独的登录页面.或者在完成对有效会话/ graphobject响应的所有检查后生成登录URL.

希望这可以帮助其他一些有同样问题的人,因为它让我好几天并且没有真正记录下来,并且与之前的api有很大的不同.您需要查看SDK以查看正在发生的事情

标签:php,facebook,facebook-graph-api,facebook-php-sdk
来源: https://codeday.me/bug/20190830/1771052.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有