Facebook 服务器端流示例
底部是服务器端流的工作示例。这是一个文件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实现所需登录的文档 谢谢大家!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 主要是我试图实现一个系统,让
....
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.");
}
?>