【发布时间】:2011-11-12 16:05:27
【问题描述】:
底部是服务器端流程的工作示例。这是一个文件 fb_server_side_flow.php,它是我根据在 developers.facebook.com 上找到的模板准备的。我的第一个问题是 $code = $_REQUEST["code"]; 到底是什么?正在做?它是否获得了 Facebook cookie?如果是这样 $code = $_REQUEST["code"];与下面的代码不同?真的有必要在 fb_server_side_flow.php 的顶部使用 session_start 吗?
主要是我试图实现一个系统,让我的用户可以选择通过 Facebook 登录,但不需要通过 Facebook 登录。有没有关于通过 Facebook OPTION 实现登录而不是通过 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_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.");
}
?>
【问题讨论】:
标签: facebook cookies login option