Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过php确认在javascript中登录Facebook_Php_Facebook_Facebook Graph Api_Facebook Php Sdk - Fatal编程技术网

通过php确认在javascript中登录Facebook

通过php确认在javascript中登录Facebook,php,facebook,facebook-graph-api,facebook-php-sdk,Php,Facebook,Facebook Graph Api,Facebook Php Sdk,我在寻找一些与我的问题非常相似的问题,但仍然在这里迷失了方向。我对JS部分没有问题。我登录并获得了我的令牌。现在我需要向php发送http请求,php将在数据库中执行查询。如何信任客户机请求?我想我必须确认服务器端的用户。因此,我采用了php SDK: 编辑:这是更新的代码,它现在正在工作。$fbToken由JavaScript获取,并通过Ajax请求传递给php。尚未使用FacebookSession,baby steps $Login = ($_SESSION["Login"])? $_SE

我在寻找一些与我的问题非常相似的问题,但仍然在这里迷失了方向。我对JS部分没有问题。我登录并获得了我的令牌。现在我需要向php发送http请求,php将在数据库中执行查询。如何信任客户机请求?我想我必须确认服务器端的用户。因此,我采用了php SDK:

编辑:这是更新的代码,它现在正在工作。$fbToken由JavaScript获取,并通过Ajax请求传递给php。尚未使用FacebookSession,baby steps

$Login = ($_SESSION["Login"])? $_SESSION["Login"] : (object)array("ativo"=>FALSE, "metodo"=>"", "id"=>-1, "nome"=>"", "tipo"=>"", "publico"=>"", "nLogin"=>0, "captcha"=>"") ;
//
$fbPhpUser = FALSE;
require $Amb->phpBib.'Facebook/autoload.php'; 
//use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
//FacebookSession::setDefaultApplication('{myAppCode}', '{myAppSecret}');
$fb = new Facebook\Facebook([
  'app_id' => '{myAppCode}',
  'app_secret' => '{myAppSecret}',
  'default_graph_version' => 'v2.3',
  ]);
try {
  // Returns a `Facebook\FacebookResponse` object
  $response = $fb->get('/me?fields=id,name', $fbToken);
  $fpPhpUser = $response->getGraphUser();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
  fim("fbGraph", 'Erro Facebook Graph: ' . $e->getMessage());
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  fim("fbSDK", 'Erro Facebook SDK: ' . $e->getMessage());
  exit;
}
if($fpPhpUser){
    $Login->ativo = true;
    $Login->metodo = "fb";
    $_SESSION["Login"] = $Login;
}
这样做的目的是确认用户已经登录,Facebook已经授权了我的应用程序,因此,{access token}将通过post http请求从客户端浏览器连同其他数据一起发送(例如:要在我的网站数据库上修改的用户注册表)$Login->ativo==TRUE意味着我可以安全地执行数据库查询。(用户也可以通过我自己的网站登录系统登录,但我希望他通过Facebook进行集成)
不确定是否可行,并且有点厌倦尝试……这是正确的方法吗?

您只需要Javascript SDK就可以实现这一点。您的授权是通过
statusChangeCallback
函数获得的:

if (response.status === 'connected') {

    //Logged into FB and app...

} else if (response.status === 'not_authorized') {

    //Have NEVER logged into the app before.... you will see permissions page...

} else {

    //NOT logged into FB... so not sure if logged into app...
}
连接后,通过AJAX将访问令牌传递给服务器,并对其执行任何操作


嗨,古斯塔沃,你说的“我怎样才能信任客户的请求”是什么意思。据我所知,访问令牌应该足够了,如果您使用jssdk获得了访问令牌,那么您唯一应该做的就是向后端发出ajax请求来存储访问令牌。然后,您可以使用PHP或任何您想要查询数据库的东西。我没有真正得到“确认”部分,但我认为您不需要。我看到的问题是JavaScript代码是开放的,因此我可以看到php脚本的文件名将执行查询,就像ajax请求调用的任何其他php脚本一样。我可以发送一个假令牌来存储并执行我想要的查询!我认为唯一安全的方法是在执行查询之前,直接从服务器上选择这个令牌并通过Facebook进行检查。如果你知道另一种方法,请回答这个问题。不要以为你读过我的问题:“我对JS部分没有问题”。显然你不会说英语“你不需要PHP SDK”,这取决于所需的安全级别。服务器如何知道Ajax发送的令牌是否真实?服务器需要一些比较基础来决定客户端是否真的是Facebook授权的客户端。我开始明白为什么每天都有那么多服务器被黑客攻击。。。