Facebook 服务器端流示例

Facebook 服务器端流示例,facebook,cookies,login,option,Facebook,Cookies,Login,Option,底部是服务器端流的工作示例。这是一个文件fb_server_side_flow.php,我根据developers.facebook.com上的模板准备的。我的第一个问题是$code=$_REQUEST[“code”]到底是什么;做什么?它会得到一个Facebook cookie吗?如果是这样的话,$code=$_请求[“code”]是怎么回事;与下面的代码不同?是否真的有必要在fb_server_side_flow.php的顶部使用session_start at 主要是我试图实现一个系统,让

底部是服务器端流的工作示例。这是一个文件fb_server_side_flow.php,我根据developers.facebook.com上的模板准备的。我的第一个问题是$code=$_REQUEST[“code”]到底是什么;做什么?它会得到一个Facebook cookie吗?如果是这样的话,$code=$_请求[“code”]是怎么回事;与下面的代码不同?是否真的有必要在fb_server_side_flow.php的顶部使用session_start at

主要是我试图实现一个系统,让我的用户可以选择通过Facebook登录,但通过Facebook登录不是一个要求。是否有关于通过Facebook实现登录选项而不是通过Facebook实现所需登录的文档

谢谢大家!

....
function get_facebook_cookie($app_id, $app_secret) {
  $args = array();
  parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
  ksort($args);
  $payload = '';
  foreach ($args as $key => $value) {
    if ($key != 'sig') {
      $payload .= $key . '=' . $value;
    }
  }
  if (md5($payload . $app_secret) != $args['sig']) {
    return null;
  }
  return $args;
}

$cookie = get_facebook_cookie(YOUR_APP_ID, YOUR_APP_SECRET);
....

fb\u server\u side\u flow.php

第一段代码用于为已经授权并登录的用户检索Facebook cookie参数

第二块代码用于让用户授权您的应用程序(oauth)和检索您的应用程序可用于代表用户进行API(FB图)调用的访问令牌

$\请求与POST或GET参数相关,而不是cookie。如果你在上面查看文档,你会发现Facebook会在用户批准你的应用程序后将用户重定向到。您应该获取该代码参数并使用它再次调用graph.facebook.com以获取用户的访问令牌

session_start()的目的是准备$_会话数组,以便跨页面重新加载保留$_会话['state']。如果您的框架已经有会话处理代码,您可以省略它。它仅用于CSRF保护位


可选登录非常简单。如果您正在使用新的PHPSDK,那么可以检查
$facebook->getUser()的返回值--如果为0,则用户未登录(您可以正常显示内容,可能还需要一个指向fb_server_side_flow.php的附加链接来开始授权过程。)

第一段代码用于为已授权并登录的用户检索Facebook cookie参数

第二块代码用于让用户授权您的应用程序(oauth)和检索您的应用程序可用于代表用户进行API(FB图)调用的访问令牌

$\请求与POST或GET参数相关,而不是cookie。如果你在上面查看文档,你会发现Facebook会在用户批准你的应用程序后将用户重定向到。您应该获取该代码参数并使用它再次调用graph.facebook.com以获取用户的访问令牌

session_start()的目的是准备$_会话数组,以便跨页面重新加载保留$_会话['state']。如果您的框架已经有会话处理代码,您可以省略它。它仅用于CSRF保护位


可选登录非常简单。如果您正在使用新的PHPSDK,那么可以检查
$facebook->getUser()的返回值--如果为0,则表示用户未登录(您可以正常显示内容,可能还需要一个指向fb_server_side_flow.php的附加链接来开始授权过程。)

这是非常有见地的评论。谢谢你的回复。这是一篇很有见地的评论。谢谢你的回复。
fb_server_side_flow.php
<?php 

   $app_id = "****";
   $app_secret = "****";
   $my_url = "http://www.sepserver.net/dsg/fb_server_side_flow.php";

   session_start();
   $code = $_REQUEST["code"];

   if(empty($code)) {
     $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
     $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
       . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
       . $_SESSION['state'];

     echo("<script> top.location.href='" . $dialog_url . "'</script>");
   }

   if($_REQUEST['state'] == $_SESSION['state']) {
     $token_url = "https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
       . "&client_secret=" . $app_secret . "&code=" . $code;

     $response = file_get_contents($token_url);
     $params = null;
     parse_str($response, $params);

     $graph_url = "https://graph.facebook.com/me?access_token=" 
       . $params['access_token'];

     $user = json_decode(file_get_contents($graph_url));
     echo("Hello " . $user->name);
   }
   else {
     echo("The state does not match. You may be a victim of CSRF.");
   }

 ?>