2012-04-06 3 views
1

Когда пользователь соединяется с Facebook и пришел на моей странице GetUser возврата() 0.GetUser() возвращает 0 на первой странице загрузки

Я использую этот код:

include 'includes/php/facebook.php'; 
$app_id = "APP_ID"; 
$app_secret = "SECRET_KEY"; 
$facebook = new Facebook(array(
    'appId' => $app_id, 
    'secret' => $app_secret, 
    'cookie' => true 
));  

$user = $facebook->getUser(); 
if($user){ 
    try { 
     $user_profile = $facebook->api('/me'); 
    }catch(FacebookApiException $e) { 
     error_log($e); 
    } 
} 

Когда страница полностью загружен FB.Event возвращает «подключен».

FB.Event.subscribe('auth.login', function(response) { 
    FB.api('/me', function(response) { 
     window.location.reload(); 
    }); 

}); 

И затем страница загружается дважды. После этого Пользователь подключается к моей странице.

Правильно ли, страница должна быть загружена дважды? Я думаю, что это не удобно. Знает кого-то еще?

Почему getUser() возвращает 0 при загрузке первой страницы?

EDIT 2:

Когда я использую пример из проверки подлинности на стороне сервера. И пользователь подключен к Facebook, я получаю детали пользователя.

<?php 

$app_id = "YOUR_APP_ID"; 
$app_secret = "YOUR_APP_SECRET"; 
$my_url = "YOUR_URL"; 

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

if(empty($code)) { 
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection 
    $dialog_url = "http://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, я получаю диалог, прежде чем я вернусь на свою страницу. Могу ли я также запросить соединение с Facebook без диалога? Или я могу по-другому развить CSRF?

+0

Не понимаю, пытаетесь ли вы аутентифицировать пользователя, используя серверный или клиентский поток? (с использованием php или js) –

+0

С серверной стороны, но getUser() возвращает 0, а затем я тестирую его с клиентской стороны (FB.Event), и этот возврат «подключен». Я не понимаю, почему getUser() возвращает 0 при загрузке первой страницы? –

ответ

0

Я не уверен, что вы просто не опубликовали код, с которым вы аутентифицируете пользователя, или просто не делаете эту часть. Недостаточно построить объект Facebook, вам необходимо пройти аутентификацию пользователя с facebook.

Вы прочитали документацию по аутентификации? Существует два типа потоков, которые вы можете взять: Server-Side и Client-Side, из вашего кода кажется, что вам нужно использовать поток на стороне сервера, чтобы иметь токен доступа для пользователя на стороне php, затем вызов для Метод getUser должен возвращать требуемый объект пользователя.

Если я ошибаюсь, и вы аутентифицируете пользователя, то, пожалуйста, отредактируйте свой вопрос и добавьте код, который вы используете для этого.

+0

Я использую серверную сторону, а пользователь аутентифицирует ее. Это не проблема. Но когда пользователь вернулся на мою страницу и связан с facebook, я автоматически подключу пользователя на своей странице. –

+0

Итак, я тестирую соединение с клиентской стороной. И когда я использую: FB.Event.subscribe ('auth.statusChange', function (response) {console.log (response)}); это ответ на загрузку первой страницы, пользователь «подключен» к Facebook. Как узнать FB.Event это? И почему я могу вызвать это с помощью php sdk при загрузке первой страницы? –

+0

Правильно ли вы реализовали аутентификацию на стороне сервера? Наверное, нет, потому что это не сработает для вас. Пожалуйста, прочитайте [Документ аутентификации на стороне сервера] (http://developers.facebook.com/docs/authentication/server-side/), есть ли здесь ** полный ** php пример, вы его использовали? Если да, то пожалуйста ** отредактируйте исходный ** вопрос с помощью кода, который вы используете, и все это имеет значение, и вам это не поможет. –

Смежные вопросы