Извлечение идентификатора пользователя из объекта сеанса Facebook Javascript SDK
Я использую Javascript SDK Facebook "FB.ui", чтобы открыть диалог OAuth. Как только вы нажмете кнопку "Разрешить", мне нужно захватить объект сеанса, извлечь идентификатор пользователя и использовать его далее в моем скрипте. По некоторым причинам я не могу заставить это работать должным образом, я продолжаю получать неопределенный, даже если сеанс существует.
<script src="http://connect.facebook.net/en_US/all.js"></script>
<div id="fb-root"></div>
<script type="text/javascript">
FB.init({
appId : '***************',
status : true,
cookie : true,
xfbml : true
});
FB.getLoginStatus(function(response) {
if (response.session) {
//do something
} else {
FB.ui({
method: 'oauth',
display: 'page',
scope: 'email',
perms: 'email'
},
function(response) {
alert(response.session.uid); //returns underfined
});
}
});
</script>
4 ответа
Так что я получил это на работу, как я хотел бы. Возможно, это не лучший способ, но после долгих размышлений и разочарований я надеюсь, что это может помочь кому-то с тем же вопросом встать на правильный путь.
JS источник:
FB.getLoginStatus(function(response) {
if (!response.session) {
//initiate FB OAuth js popup dialog
FB.ui({
method: 'oauth',
display: 'page',
scope: 'email',
perms: 'email'
},
function(response) {
if (response.session) { //if permission Allowed
var thesession = response.session;
var thesession = eval('(' + thesession + ')'); //decode json
//POSTing to local file get.user_graph.php, to fetch user info
$.ajax({
type: "POST",
url: "get.user_graph.php",
data: "client_id=<?php echo $appId; ?>&client_secret=<?php echo $secret; ?>&sessions="+thesession.session_key+"&type=client_cred&uid="+thesession.uid,
dataType: "text",
success: function(user_graph){
var user_graph1 = eval('('+user_graph+')');
alert(user_graph1.name); //users name
alert(user_graph1.id); //users id
alert(user_graph1.email); //users email
alert(user_graph1.link); //users profile link
}
});
} else {
//if permission Not Allowed
}
});
}
});
get.user_graph.php источник:
//exchange our session for an access_token
define('POSTURL', 'https://graph.facebook.com/oauth/exchange_sessions');
define('POSTVARS', 'client_id='.$_POST['client_id'].'&client_secret='.$_POST['client_secret'].'&sessions='.$_POST['sessions'].'&type=client_cred');
$curl_token = curl_init(POSTURL);
curl_setopt($curl_token, CURLOPT_POST,1);
curl_setopt($curl_token, CURLOPT_POSTFIELDS,POSTVARS);
curl_setopt($curl_token, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($curl_token, CURLOPT_HEADER,0);
curl_setopt($curl_token, CURLOPT_RETURNTRANSFER,1);
$token = curl_exec($curl_token);
$token_decoded = json_decode($token,true);
//get the user graph (personal info)
$user_graph = file_get_contents("https://graph.facebook.com/".$_POST['uid']."?access_token=".$token_decoded[0]['access_token']);
echo $user_graph;
Чтобы получить идентификатор пользователя:
FB.getLoginStatus(function(response) {
alert(response.authResponse.userID);
});
Когда вы входите через кнопку входа в Facebook, он сохраняет в вашей системе файлы cookie, которые содержат ваш токен доступа, который также является уникальным. Эти файлы cookie также содержат ваш идентификатор Facebook.
Проверьте свой ответ. Могу поспорить, это говорит что-то вроде "display" must be one of "popup", "iframe" or "hidden".
По-видимому, диалог oauth не может быть вызван с отображением страницы по умолчанию. А также display: 'iframe'
требует, чтобы вы включили access_token, поэтому вы сначала вызываете диалог oauth>:l .
Я не думаю, что в настоящее время FB.ui можно использовать для получения диалогового окна "oauth", если только вы не хотите использовать всплывающее окно, которое большинство пользователей в настоящее время заблокировали.