$ facebook-> getSession () возвращает ноль в примере кода. это нормально? - PullRequest
4 голосов
/ 10 мая 2010

Выполнение примера кода для API Facebook Я получаю нулевой объект сеанса, и я должен получить ненулевой объект, дающий комментарий в коде. Что я делаю не так?

Другими словами, в моем index.php этот фрагмент из кода примера показывает "нет сеанса" , когда я иду в http://apps.facebook.com/my_app в моем браузере:

<?php

require './facebook.php';

// Create our Application instance.
$facebook = new Facebook(array(
  'appId' => '...', // actual value replaced by '...' for this post
  'secret' => '...', // actual value replaced by '...' for the post
  'cookie' => true,
));

// We may or may not have this data based on a $_GET or $_COOKIE based session.
//
// If we get a session here, it means we found a correctly signed session using
// the Application Secret only Facebook and the Application know. We dont know
// if it is still valid until we make an API call using the session. A session
// can become invalid if it has already expired (should not be getting the
// session back in this case) or if the user logged out of Facebook.
$session = $facebook->getSession();

if ($session) {
  echo "session ok";
}
else {
  echo "no session";
}


?>

Примечание: на моем сервере index.php и facebook.php находятся в одной папке.

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

Пожалуйста, проверьте сообщение № 8 на http://forum.developers.facebook.net/viewtopic.php?pid=267627

Это сработало для меня. Спасибо пользователю "standardcombo".

Я скопировал его здесь для вашего удобства.

  1. Перейти на страницу разработчика "Мои приложения"
  2. Выберите ваше приложение и «Изменить настройки»
  3. Дополнительно> Миграции> Включить «OAuth 2.0 для Canvas (бета)»
3 голосов
/ 10 мая 2010

Вы уже связали свое приложение?

if ($session) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl();
}
 <?php if ($me): ?>
<a href="<?php echo $logoutUrl; ?>">
<img src="http://static.ak.fbcdn.net/rsrc.php/z2Y31/hash/cxrz4k7j.gif">
</a>
<?php else: ?>
<div>
Using JavaScript &amp; XFBML: <fb:login-button></fb:login-button>
</div>
<div>
Without using JavaScript &amp; XFBML:
<a href="<?php echo $loginUrl; ?>">
<img src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif">
</a>
</div>
<?php endif ?>

Код взят по предоставленной вами ссылке.

1 голос
/ 18 июня 2010

Я не уверен, что вы уже ответили на этот вопрос, но вот что я нашел, работая сам. Даже если пользователь вошел в Facebook, при первой попытке получить сеанс он будет пустым. В примере приложения, которое я нашел, в форму помещается кнопка входа в систему. Однако, если вы это сделаете, пользователю придется нажимать на кнопку, даже если они уже вошли в Facebook. Они больше не будут запрашиваться, но это дополнительное действие пользователя.

Так что в моем приложении и в том, что работало для нескольких других, я обнаружил на форумах просто перенаправить на URL входа. (Если вы проверяете URL-адрес, один из его параметров - «return_session = 1».) Когда он вернется, у вас будет сеанс, и вы сможете продолжить его как обычно.

Но в моем приложении, если у меня нет токена приложения, я также не могу получить этот сеанс, поэтому сначала мне нужно получить токен приложения. Чтобы получить токен приложения, посмотрите отличное описание от http://forum.developers.facebook.com/viewtopic.php?id=56789, поста Dynamoman от 7 мая 2010 года (о четвертом посте).

Одна вещь, с которой я столкнулся, заключается в том, что независимо от того, где я говорю, аутентификация - это «следующая» страница, она переходит на страницу, настроенную на холсте. Таким образом, вместо трех отдельных страниц у меня есть только две, и URL обратного вызова canvas должен обрабатывать любое состояние, в котором он находится.

Мой настоящий код находится внутри фреймворка, поэтому он не применим напрямую; как алгоритм это:

landing page:
    if the facebook api token is not loaded,
        redirect to the authorization url
    try to load the user id // to validate that the session
    if the user id is not loaded,
        redirect to the loginurl from the facebook api
    // if it reaches here, then we have both an api token and a session

authorization page:
    get authorization token // see the post for how to do that
    redirect back to the page configured as the canvas url

Может быть, есть лучший способ, и я уверен, что кто-то, более знакомый с этим, чем я, мог бы найти лучшее решение или опубликовать общий код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...